考虑以下代码:在哪个编译单元中存在一个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