为了账号安全,请及时绑定邮箱和手机立即绑定

为什么const意味着C ++中的内部链接,当它不在C中时?

为什么const意味着C ++中的内部链接,当它不在C中时?

C++
阿波罗的战车 2019-08-27 17:27:30
为什么const意味着C ++中的内部链接,当它不在C中时?见主题。他们在想什么?更新:从“静态”更改为“内部链接”以避免混淆。举个例子......把以下内容放在一个文件中:const int var_a = 1;int var_b = 1;......并g++ -c test.cpp仅用出口进行编译var_b。
查看完整描述

3 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

我相信你的意思

为什么const意味着C ++中的内部链接

确实,如果在命名空间范围内声明一个const对象,那么它就具有内部链接。

附录C(C ++ 11,C.1.2)给出了基本原理

更改:显式声明为const且未显式声明为extern的文件范围名称具有内部链接,而在C中则具有外部链接

基本原理:因为const对象可以在C ++中用作编译时值,所以这个特性促使程序员为每个const提供显式的初始化值。此功能允许用户将const对象放在许多编译单元中包含的头文件中。


查看完整回答
反对 回复 2019-08-27
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

正如litb所说,const对象具有内部联系。这是因为它们的用途如下:


// a.cpp

const int BUFSIZE = 100;

char abuf[BUFSIZE];


// b.cpp

const int BUFSIZE = 256

int bbuf[BUFSIZE];


查看完整回答
反对 回复 2019-08-27
?
HUX布斯

TA贡献1876条经验 获得超6个赞

在C&C ++中,术语静态有多种含义(它可以控制链接和存储)你必须阅读Stroustrup的D&E才能理解他的基本原理 - 但是当你在命名空间范围内声明一个变量为const时,它会自动具有内部联系 - 而在C中,您必须将其声明为静态以强制它具有内部链接。

当然在C ++中,不推荐使用静态控制链接,匿名命名空间可用于模拟C ++中的内部链接。

C ++中的const变量应该替换预处理器常量 - 并且由于预处理器常量仅在定义它们的文件中可见,类似地,const自动使变量仅在定义它的文件中可见。


查看完整回答
反对 回复 2019-08-27
  • 3 回答
  • 0 关注
  • 480 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信