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

pat*_*fox 3 c++

我有以下代码

// header
const char* NAME1 = "C++";        // linker error
const char* const NAME2 = "C++";  // fine
Run Code Online (Sandbox Code Playgroud)

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

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

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

yac*_*oor 6

未声明extern且先前未声明具有外部链接的非易失性非内联const限定变量,在名称空间范围内声明,具有内部链接(请参阅https://en.cppreference.com/w/cpp/语言/ storage_duration#Linkage)。

NAME1指向const char,但不是const,它具有外部链接。NAME2const这样它得到内部联系