簡體   English   中英

我應該在類或名稱空間范圍使用靜態const變量嗎?

[英]Should I prefer static const variables at class or namespace scope?

一個相對於另一個有什么明顯的好處嗎? 我開始使用后者,因為它不會用靜態const聲明污染頭文件,因此它讀起來有點容易。 我經常在幾個成員函數中使用這些常量。

班級范圍:

.HPP

class MyType 
{
private:
    static const std::wstring kFoo;
}

的.cpp

const wstring MyType::kFoo(L"foo");
...
void MyType::parse(const wstring& input)
{
    if (input == kFoo) { do1; }  
    ...
}

命名空間范圍

的.cpp

const wstring kFoo(L"foo");
...
void MyType::parse(const wstring& input)
{
    if (input == kFoo) { do1; }  
    ...
}

首先,

const wstring kFoo(L"foo");

在全局范圍內,不在namespace 您可以輕松地將其包裝在匿名namespace

namespace
{
   const wstring kFoo(L"foo");
}

關於最好使用類的static成員還是使用namespace的成員的問題,答案取決於團隊編碼風格准則以及個人喜好。

我的建議是將其放在.cpp文件中的匿名namespace下。 這樣,它可以保留實現細節,並且類定義不會受到實現細節的污染。

PS

請注意, 類[ v ++]中的類與名稱空間中的靜態字符串常量問題[c ++]解決了該問題,但有所不同。 在另一篇文章中,用戶希望在多個文件之間共享static成員變量。 在您的文章中,您已明確地將static成員變量作為private成員,因此不會在文件中共享。 如果該評估是不正確的,則您的問題是另一個問題的重復,因此應同樣予以解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM