为什么const x在包含它时可以正常

时间:2013-11-27 02:05:00

标签: c++ const

COMMON.H

int i=10

cpp one:
include "common.h"


cpp two:
include "common.h"

将显示多个定义错误,

但是我改变了代码:从int i = 10到const int i = 10,没关系。 我的问题是为什么const可以吗?有什么不同。

PS:我知道为什么只有int i = 10才不行,但我不知道为什么const我没问题?

3 个答案:

答案 0 :(得分:3)

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

  

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

具有内部链接的对象对链接器不是“可见的”,因此当您在多个转换单元中具有相同的声明时,链接器将不会注意到。这是有道理的,因为具有相同值的所有整数常量彼此相同。

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

答案 1 :(得分:2)

全局const对象不需要任何存储空间。

答案 2 :(得分:1)

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

嗨,中国的哥们:D