2016-12-16 63 views
2

在我工作的C++代碼庫中,聲明常量的模式看起來像這樣。在頭文件或實現文件中定義常量的優點

// module_constants.h 
#ifndef MODULE_CONSTANTS 
#define MODULE_CONSTANTS 

namespace module { 

extern const int SOME_CONST; 

} 

#endif 
// module_constants.cpp 
#include "module_constants.h" 

namespace module { 

const int SOME_CONST = 1; 

} 

什麼是這種方法的優點,而不是定義在頭所有的常數值?

回答

-2

那麼,如果將它包含在多個cpp文件中,那麼通過將它放入標題中就可以運行一個定義規則。

但是,另一方面,你可以創建它作爲一個constexpr在頭上我相信。

+7

'const int SOME_CONST = 1;'在頭文件中就好了。沒有ODR問題,因爲'SOME_CONST'具有內部鏈接。 –

+0

這也不會影響鏈接嗎?即如果你在'.cpp'和'.h'中改變了const的值,會發生什麼? –

-1

好吧,有很多的缺點。特別是,這些常量名不能被人們用作編譯時間常量,包括頭文件。

5

我知道的一個優點是,當您更改常量的值時,只需要重新編譯單個cpp文件,而不是每個直接或間接包含頭文件的文件。

當您提供一個動態鏈接的庫並且希望在不重新編譯實際應用程序的情況下對其進行修補時,這可能特別有用。

一些缺點是

  • (如latedeveloper寫),你不能在需要的常量表達式的cppfile的外部(例如數組邊界或模板參數)的地方,在其中定義使用它們它。
  • 您使優化器的生活更加艱難。從工具的角度來看,例如
  • 。 intellisense不會告訴你它的價值。
+0

我的回答有任何問題,或者爲什麼downvote?我總是樂於學習新事物。 – MikeMB

相關問題