带有常量指针的重复符号错误,但在C ++中没有常量指针

时间:2019-03-29 10:40:47

标签: c++

我有以下代码

// header
const char* NAME1 = "C++";        // linker error
const char* const NAME2 = "C++";  // fine

如果此头包含在多个源文件中,则第一个声明将导致链接器错误

  

ld:1个用于x86_64体系结构的重复符号

为什么允许第二个声明?在包含标头的两个源文件中,NAME2标识符的地址都相同。因此,以某种方式使NAME2成为常量指针也会改变其链接。如何运作?

1 个答案:

答案 0 :(得分:6)

未声明为extern且先前未声明为具有外部链接的非易失性非内联const限定变量(在命名空间范围内声明)具有内部链接(请参见this

NAME1指向const char,但不是const,因此具有外部链接。 NAME2const,因此它具有内部链接