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