簡體   English   中英

在哪里定義編譯時常量?

[英]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.

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