为什么const x在多重包含时是可以的

why const x is ok when multi include it

本文关键字:包含时 const 为什么      更新时间:2023-10-16

common.h

int i=10
cpp one:
include "common.h"

cpp two:
include "common.h"

将显示多个定义错误,

但我更改了代码:从int I=10更改为const int I=10,这是可以的。我的问题是为什么它是可以的?有什么不同。

PS:我知道为什么只有int I=10是不好的,但我不知道为什么const I是好的?

这是因为命名空间范围中的const限定声明默认具有内部链接:

7.1.5.1.2在命名空间作用域中使用const限定类型声明的对象具有内部链接,除非它被明确声明为extern或之前声明为具有外部链接。

具有内部链接的对象对链接器来说是不"可见"的,因此当您在多个翻译单元中有相同的声明时,链接器不会注意到。这是有道理的,因为所有具有相同值的整数常数都是相同的。

另一方面,没有const限定符的对象具有外部链接。这就是在链接期间导致多重定义错误的原因。

全局常量对象不需要任何存储。

在C语言中,全局常量变量有其地址,而在C++中,它被视为编译时常数,并放入符号表中,因此它是唯一的。

嗨,中国朋友:D