我有以下代码
// header
const char* NAME1 = "C++"; // linker error
const char* const NAME2 = "C++"; // fine
如果此头包含在多个源文件中,则第一个声明将导致链接器错误
ld:1个用于x86_64体系结构的重复符号
为什么允许第二个声明?在包含标头的两个源文件中,NAME2标识符的地址都相同。因此,以某种方式使NAME2成为常量指针也会改变其链接。如何运作?
答案 0 :(得分:6)
未声明为extern
且先前未声明为具有外部链接的非易失性非内联const限定变量(在命名空间范围内声明)具有内部链接(请参见this)
NAME1
指向const char
,但不是const
,因此具有外部链接。 NAME2
是const
,因此它具有内部链接