在哪个编译单元中存在constexpr变量?

Tri*_*ian 5 c++ constexpr

考虑以下代码:

struct foo
{
    static constexpr int value = 42;
};

void bar(const int* value) { std::cout << *value; }
int main() { bar(&foo::value); }
Run Code Online (Sandbox Code Playgroud)

编译没有问题,并没有在警告夫妇的在线编译器我试过了.鉴于没有.cpp定义该constexpr值的单个文件,如果bar从不同的编译单元调用该方法,指针的值是否可以不同?或者标准是否保证值最终只在所有编译单元中分配一次(即隐式_declspec(selectany))?

Bri*_*ian 9

它对我不起作用 - 我收到链接器错误.http://coliru.stacked-crooked.com/a/59e2cf56122733d0

如果你没有使用静态constexpr成员,你可以想象它在任何需要的地方内联,并且不存在于任何编译单元中.如果你不 ODR使用它,因为你在程序中所做的那样,你必须定义它.