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我没问题?
答案 0 :(得分:3)
这是因为const
- 命名空间范围内的限定声明默认情况下具有内部链接:
7.1.5.1.2。在命名空间作用域中使用const限定类型声明的对象具有内部链接,除非它是显式声明为extern或除非之前声明为具有外部链接。
具有内部链接的对象对链接器不是“可见的”,因此当您在多个转换单元中具有相同的声明时,链接器将不会注意到。这是有道理的,因为具有相同值的所有整数常量彼此相同。
另一方面,没有const
限定符的对象具有外部链接。这是链接时间内导致多个定义错误的原因。
答案 1 :(得分:2)
全局const对象不需要任何存储空间。
答案 2 :(得分:1)
在C语言中,全局const变量有其地址,而在c ++中,它被视为编译时常量并放入符号表中,因此它是唯一的。
嗨,中国的哥们:D