簡體   English   中英

這句話在C ++ 11標准的第3.2.2段中意味着什么?

[英]What does this sentence mean in paragraph §3.2/2 of the C++11 Standard?

該句是第3.2 / 2段的一部分:

名稱顯示為潛在評估表達式的變量是odr-used,除非它是滿足出現在常量表達式(5.19)中的要求的對象,並且立即應用左值到右值轉換(4.1)

粗體句子究竟是什么意思?

編輯

這個被認為是重復的問題的答案,並沒有說任何可以回答我的問題。

這意味着當你使用常量作為常量時,就像你實際上使用常量一樣。

struct S {
  static const int i = 0;
};
int main() {
  return S::i;
}

雖然S::i有一個初始化器,但是它沒有定義,但是你的問題中的文本對這樣的用法做了一個特殊的例外,其中S::i僅被訪問它的值。 在這種情況下,不需要定義。

另一方面,其他用途確實需要定義:

struct S {
  static const int i = 0;
};
int f(const int &i) {
  return i;
}
int main() {
  return f(S::i);
}

該程序無效,並被某些實現接受,但被其他人拒絕。 f的調用需要存在S::i的實際定義,但如果f內聯,則缺少定義可能未被診斷。

在我的系統上,如果沒有優化地編譯和鏈接第二個程序,我得到:

$ g++ test2.cc -o test2
/tmp/ccdEsfxs.o:test2.cc:function main: error: undefined reference to 'S::i'
collect2: error: ld returned 1 exit status

為了使其工作,需要提供定義,如下所示:

struct S {
  static const int i = 0;
};
const int S::i;

暫無
暫無

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

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