考慮以下代碼:在哪個編譯單元中存在一個constexpr變量?
struct foo
{
static constexpr int value = 42;
};
void bar(const int* value) { std::cout << *value; }
int main() { bar(&foo::value); }
這將編譯下online compilers的couple我想罰款,沒有警告。鑑於沒有單個.cpp
文件定義constexpr
值,如果從不同的編譯單元調用bar
方法,指針的值可能會不同?或者,標準是否保證該值在所有編譯單元中只分配一次(即隱含的_declspec(selectany)
)?
你剛剛編譯過,還是鏈接了程序? –
只要您[實際使用](http://ideone.com/Bi5oEt)地址,您需要提供一個定義。 –
該代碼違反了單定義規則,但由於這是未定義的行爲,因此編譯器不需要發出任何警告。 – cpplearner