簡體   English   中英

沒有定義結構的靜態const成員

[英]static const member of a struct is not defined

使用符合03標准的編譯器(gcc-3.3.2的安全關鍵變體)。 該標准規定必須定義靜態成員對象(9.4.2(4))。 它還指出單定義規則成立,但不需要診斷(9.4.2(5))。 以下代碼是否有效?

struct fred
{
    static const int JOE=1;
    int m_joe;
    fred() : m_joe(JOE) {}
};

也就是說, 沒有 “static const int fred :: JOE;”。 我問,因為我們有一個案例(顯然),模板類中的靜態const int從未被定義,並且代碼在某些上下文中工作,但在其他情況下不起作用。 我用枚舉替換了靜態const int,它適用於所有情況。 我們肯定在未定義行為的土地上嗎?

static const int定義了一個編譯時常量; 我擔心我不能參考標准的特定部分。 您需要定義它的唯一時間是您嘗試獲取它的地址或創建引用。 如果您使用枚舉,編譯器將在您需要引用時為您創建臨時變量。

struct test
{
    static const int one = 1;
    enum { two = 2 };
};

void printint(const int & i)
{
    cout << i << endl;
}

int main() {
    printint(test::one);  // error
    printint(test::two);  // no error
    return 0;
}

暫無
暫無

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

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