我可以为静态成员编写以下内容:
// foo.h
struct A {
static constexpr int x = 2;
};
// foo.cpp
constexpr int A::x;
是否可以对顶级变量做同样的事情?这在 C++11 中不起作用:
// foo.h
constexpr int x = 2;
// foo.cpp
constexpr int x;
它失败了:
<source>:3:15: error: redefinition of 'constexpr const int x'
在表达式中添加 static 也无济于事。我知道一个解决方法是让它成为静态成员,但我想了解为什么非成员版本不起作用。
最佳答案
这是一个 PEBKAC。您可以获取 constexpr 变量的地址:
constexpr int x = 2;
const int* const f() {
return &x;
}
这可以正常工作:生成了一个用于 x
的链接器部分,并且这个声明重复了多少次都没有关系。因此,确实没有任何充分的理由想要使用静态 constexpr 成员所必需的相同习惯用法。
关于c++ - 获取 constexpr 全局变量(不是静态成员)的链接器符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49844949/