【发布时间】:2016-06-02 12:51:37
【问题描述】:
在-std=c++14 之前的 g++ 中可以重现此问题。由于以下代码中突出显示的const,会生成链接错误。如果删除 RHS const,它就会消失。
/* main.cpp */
const char* const arr[2] = {"Hello", "World"};
// ^^^^^
int main () {}
和
/* foo.cpp */
extern const char* const arr[2];
// ^^^^^
const char* foo () { return arr[0]; }
编译时:g++ [-std=c++11] main.cpp foo.cpp,它给出以下链接错误:
In function `foo()': undefined reference to `arr'
是编译器错误还是语言限制/功能?
【问题讨论】:
-
const命名空间范围内的变量 are implicitlystatic,除非您添加extern。我不确定为什么-std=c++14的行为会发生变化。 -
不应该将
extern const char* const arr[2];放在同时包含main.cpp和foo.cpp的头文件中吗? -
@Quentin 我不知道为什么 OP 说 pre c++14, g++ 5.1.0 在任何模式下都会产生错误(c++14 c++17),你的评论应该是答案
-
无法在 GCC 6.1 上复制,所有
std标志的行为都是一致的。
标签: c++ c++11 constants linker-errors compiler-bug