gpt4 book ai didi

c++ - 为什么 const x 在 multi include 时没问题

转载 作者:行者123 更新时间:2023-11-30 00:51:57 25 4
gpt4 key购买 nike

通用.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 i可以?

最佳答案

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

7.1.5.1.2. An object declared in namespace scope with a const-qualified type has internal linkage unless it is explicitly declared extern or unless it was previously declared to have external linkage.

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

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

关于c++ - 为什么 const x 在 multi include 时没问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20231616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com