我很好奇C++中不同的常量聲明和定義選項的好處/壞處。時間最長的,我剛剛在頭文件的頂部聲明它們的類定義之前:在C++中聲明/定義類範圍常量的地方?
//.h
const int MyConst = 10;
const string MyStrConst = "String";
class MyClass {
...
};
雖然這污染了全局命名空間(我知道是一件壞事,但從來沒有發現一個原因爲什麼它不好的洗衣清單),常量仍將限定在單個翻譯單元中,因此不包含此標題的文件將無法訪問這些常量。但是,如果其他類定義了一個同名的常量,則可能會發生名稱衝突,這可能不是一件壞事,因爲它可能是一個可以重構的區域的良好指示。
最近,我決定,這將是更好的聲明類定義本身的內部類特定的常量:
//.h
class MyClass {
public:
static const int MyConst = 10;
...
private:
static const string MyStrConst;
...
};
//.cpp
const string MyClass::MyStrConst = "String";
常量的可見性將取決於是否恆定,僅在內部所使用調整該類或其他使用該類的對象所需的類。這就是我現在想的最好的選擇,主要是因爲你可以保持內部類常量對類是私有的,而任何其他使用公共常量的類都會有更詳細的常量源(例如MyClass: :MYCONST)。它也不會污染全局命名空間。雖然它不利於在cpp文件中要求非整數初始化。
我也考慮將常量移入它們自己的頭文件中,並將它們包裝在名稱空間中,以防其他類需要常量,但不是整個類定義。
只是尋找意見和其他可能的選擇,我還沒有考慮。
是的,但你必須使用'static'或在這種情況下,一個匿名的命名空間 - 如果你不這樣做,在一些實現你污染全局命名空間鏈接器使用並獲取鏈接名稱衝突... – hjhill 2010-01-11 17:30:25