c++ - 获取 constexpr 全局变量(不是静态成员)的链接器符号

标签 c++ c++11

我可以为静态成员编写以下内容:

// 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/

相关文章:

c++ - 为什么在 C++ 中将较大函数中的某些功能编写为 lambda?

c++ - 如何在C++中制作无限序列

c++ - 在 C 和 C++ 中更改控制台输出的背景颜色

c++ - 了解空继承类的未使用 typedef

c++ - Linux下如何将ARM和Flash组装到STM32?

c++ - 类变量 - 对齐

c++ - 无法声明静态 constexpr char []

c++ - 如何在 Qt 中使用两个键修饰符设置 3 键序列快捷方式?

c++ - 为结构/类自动生成流运算符

c++ - C++0x 什么时候完成?