C++ 中的普通常量变量
Posted
技术标签:
【中文标题】C++ 中的普通常量变量【英文标题】:Plain Constant variables in C++ 【发布时间】:2012-11-23 13:35:03 【问题描述】:默认为内部链接。 假设如果我有以下情况:
我在头文件中定义了一个const变量(const int var = 2
)
然后我在两个 cpp 文件中包含头文件。
如果我尝试在两个 cpp 文件中获取该 const 变量的地址(即&var
),那么这两个地址是否相同?我还需要一个小的工作代码来验证这个事实。
我不得不将此作为一个问题发布,因为我是新手,所以我无法在此线程中给出的this answer 的 cmets 中问它。
【问题讨论】:
我想你对 C++ 感兴趣。 C 的规则完全不同。所以我建议删除C标签。 这个测试肯定只需要一分钟? @Rook: 没有。"a"=="a"
在我的系统上,但实际上并不能保证。
constant variables not working in header的可能重复
【参考方案1】:
对于C++
,由于内部链接,它不会相同 - 这是两个不同的对象。
在C
中则相反,const
将具有外部链接,因此您将由于重新定义而出现链接错误。
【讨论】:
这就是我的想法。但是我提到的链接中的答案说它会是一样的。 那里不是这么说的。仔细阅读 - 该答案中的“相同”地址是因为它是相同的全局变量。您应该阅读一下extern
关键字和全局变量的含义。
@UchiaItachi 你误读了那个答案。它说如果你在标题中将它们声明为外部并在一个.cc
文件中定义它们,那么你会得到相同的地址。
@icepack 哎呀!我读错了评论。我知道“extern”关键字,但在阅读答案中的第二点时没有抓住它。此外,在我的问题的开头使用“Plain”这个词有点暗示我知道“extern”。无论如何,感谢您指出我的盲读。呵呵!!【参考方案2】:
那这两个地址会一样吗?
没有。因为头文件在编译期间包含在 *.cpp 文件中,所以每个包含头文件的 *.cpp 都会创建自己的常量。
但是,如果你在 header 中使用extern const int var;
并在 *.cpp 中设置默认值,它们应该是相同的。
【讨论】:
【参考方案3】:变量将有不同的地址。也有可能,如果您没有在任何地方引用变量地址,则变量将在编译期间用他的值替换,并且在二进制文件中您根本找不到变量值。
【讨论】:
如果它没有被引用,变量和它的值可以从二进制文件中完全省略,而不是替换以上是关于C++ 中的普通常量变量的主要内容,如果未能解决你的问题,请参考以下文章