簡體   English   中英

C ++-將const幻數放到命名空間中

[英]C++ - Put const magic numbers into namespace or not

我一直使用#define在cpp文件開頭的某個位置定義幻數。 我想將其更改為const數字。 (在cpp文件中聲明/定義的全局變量。)這是一個好主意嗎? 我應該將它們放入匿名名稱空間嗎? 我從不在任何地方#include cpp文件。

基本上,選擇這樣的#define “ consts”的唯一原因是預處理器本身是否需要使用它們。 除此之外,與使用此類#define相比, constexpr具有許多優點-它們在此處列出

僅當您要在同一文件中使用幻數時匿名名稱空間才是一個好的解決方案,因為其中的名稱永遠無法從其他翻譯單元訪問,因為就編譯器而言,未命名的名稱空間具有唯一的標識符。 就是說,將幻數放在匿名名稱空間中並沒有真正的好處,因為任何名稱空間范圍中的 constconstexpr變量本質上都具有內部鏈接

constconstexpr之間的差異在對象上下文中而言,要點是,雖然constexpr表示在編譯期間已知的常數值,但const僅表示在編譯期間可能未知的常數值。 1這種差異對於編譯時編程或在其他常量表達式中的使用至關重要。


1請注意,本身使用常量表達式(例如整數文字 )作為其聲明的一部分初始化的const 積分 ,即使未顯式聲明constexpr也隱式為常量表達式

const int A = 50; // `A` is a constant expression

int n = 50;
const int B = n; // `B` is not a constant expression as it-
                 // is not being initialized with a constant expression

這是一個好主意嗎?

是的,因為#define有幾個問題,例如:

#define SIX 1 + 5
#define NINE 8 + 1

constexpr int the_answer = SIX * NINE; // 42 and not 54

我應該將它們放入匿名名稱空間嗎?

如果在文件范圍內使用,是的,這很有意義。

暫無
暫無

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

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