可能重複:
Static members class vs. normal c-like interface爲什麼要在類中定義常量而不是命名空間?
我在看大人物代碼,並有一類定義如下幾十個常量:
// header file
class Defines
{
public:
static const int Val1;
static const int ValN;
static const char* String1;
static const char* StringN;
...
}
// .CPP
const char* Defines::String1 = "some value"
etc.
是有一些原因做這些事情,而不是使用名稱空間呢? 超過其他
--------- ----------編輯一個有優勢/劣勢
對不起,我明明應該指出這一點因爲沒有人從班級名稱中推斷出來 - 這是「定義」。即這些常量不與某個特定的類相關聯,因此創建了一個專門用於保存常量而不是其他任何東西的類,這就是Defines所包含的所有類。
我的問題是不是你爲什麼應該把常量在一個特定的類,問題是有沒有在收集數十人在一起,並把它們一類其唯一目的是收集在一起的常量,而不是任何值將它們一起收集到一個名稱空間中,或者只是將它們收集在專門用於該目的的頭文件中。
(項目中沒有當前存在的名稱空間,因此在答案中提到的污染名稱空間的潛在問題不是)
-----第32次編輯-----------
和跟進的問題--- 拼勁 爲const char *定義:: StringN = 「someValue中」
在.h文件低效與將其放置在.cpp文件?
但是,1)沒有先前存在的名稱空間混亂。2)正如「定義」這個類的名字所表明的那樣,它們是在一個沒有別的東西的類中,即。與他們相關的特定特定類別無關。 – Gruntcakes 2011-05-09 21:56:29
它仍然增加了含義,因爲你知道它來自哪裏(因此,如果你需要的話,在哪裏尋找它),它集中了分佈,而不是讓一堆命名空間全局變量生存在隨機文件中。它集中了位置,類似於將本地化詳細信息存儲到單個資源文件中(至少對於給定的單元)。 – pickypg 2011-05-09 22:00:02
對不起,但我沒有看到收集類中常量與將它們收集在名稱空間中的區別。命名空間同樣集中了它們的分佈,並且你知道在哪裏尋找它們,所以爲什麼使用類比命名空間更好?我的問題不是爲什麼把它們收集在一起,我的問題是是否將它們收集在一個類中或命名空間中,如果在一個類中,爲什麼一個類在命名空間上,如果命名空間,爲什麼命名空間在類上,如果它沒有區別,那麼這也是一個答案。 – Gruntcakes 2011-05-09 22:07:34