获取 constexpr 全局变量(不是静态成员)的链接器符号
Getting a linker symbol for a constexpr global variable (not a static member)
我可以为静态成员编写以下内容:
// 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'
向表达式添加静态也无济于事。我知道一种解决方法是仅将其设置为静态成员,但我想了解为什么非成员版本不起作用。
这是一个
PEBKAC。你可以获取 constexpr 变量的地址:
constexpr int x = 2;
const int* const f() {
return &x;
}
这工作正常:生成x
的链接器部分,并且此声明重复多少次并不重要。因此,实际上没有任何充分的理由想要做静态 constexpr 成员所需的相同习语。
相关文章:
- 使用gcc从静态链接的文件中查找可选符号
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- Windows 链接器是否使用 LoadLibrary 解析 DLL 中未定义的符号?
- 如果我想链接静态库并删除未使用的符号.txt我应该如何处理 Cmakelist
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- emscripten 链接全局命名符号乘法定义
- 体系结构x86_64的未定义符号:链接器错误
- 共享对象、符号、C/C++ 库链接和加载
- 如何防止 CMake 在构建时(而不是在安装时)为共享库创建符号链接?
- 如何将空文件夹和符号链接添加到存档 - libarchive
- 协议缓冲区的静态链接会导致与现有符号冲突
- 链接器错误:切换到unicode生成给出:未解析的外部符号WinMain
- SWIG链接器:未定义符号:_ZN2cv8fastFreeEPv(cv::fastFree(void*))
- 使用共享库编译可执行文件时仅链接所需的符号
- 为什么链接器报告全局函数的乘法定义符号,而不是类静态方法
- 未定义的引用,即使库正在链接并且它包含正确的符号
- C++ 链接器错误 LNK 2019 函数中引用的未解析的外部符号
- boost::存在符号链接不取消引用
- 检测无意的弱链接符号
- c++ Linux静态变量的双重析构.链接符号重叠