[英]Where to define compile-time constants?
我做了一個超級簡單的設計來開始解決問題。
現在,起初這可能看起來非常微不足道,但由於有很多方法可以做到這一點,由於我缺乏專業經驗,這讓我感到困惑。
我將在哪里定義這些編譯時間常量? (一直假設我用的是電流最高的C++標准版)
在命名空間中? class 內部? class在外啊? 在class之外的.cpp? 只是將它們用作幻數並添加一些評論? static? 非靜態的? 常量? 常量表達式? 模板甲板尺寸以防它更大?
我想到的:
class JolloManager
{
private:
constexpr static int rounds = 3;
constexpr static int deckSize = 52;
constexpr static int princeId = 1;
constexpr static int princessId = 2;
std::array<int, deckSize> deck;
public:
JolloManager() {};
};
這個對嗎?
在 C++17 中,定義編譯時 integer 常量很容易。
首先,您應該確定常量是否應限定為 class。 如果將其作為 class 成員有意義(例如,它屬於 class 所代表的概念),則將其設為 class 成員。 否則,不要。
作為 class 成員,請寫:
class JolloManager {
constexpr static int rounds = 3;
};
而已。 C++17 不再需要外線定義。
如果它不是 class 成員,但您希望包括您的 header 的每個人都能夠訪問該值,則將其寫入 header:
inline constexpr int rounds = 3;
(從技術上講,使用inline
的原因是當變量被多個翻譯單元中的內聯 function 使用 ODR 時避免 ODR 違規。)
如果該值是只有一個.cpp
文件需要訪問的實現細節,則在該.cpp
文件中寫入以下內容以提供內部鏈接(即,防止與其他翻譯單元中的名稱沖突):
constexpr int rounds = 3; // no `inline` this time
最后,如果僅單個 function 需要該常量,則可以將其設置為該 function 的本地:
void foo() {
constexpr int rounds = 3;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.