C++中const的连接特性

jadeinsea 2003-08-25 09:24:08
我理解是否正确:“在C++中,普通变量或对象默认的连接方式为内部连接,所以在其他文件中引用时候要用extern声明;而函数一般是外部连接(除inline、const外)”
上面的理解对吗?

...全文
81 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jadeinsea 2003-08-25
  • 打赏
  • 举报
回复
问题1:为什么复杂的结构必须必须分配内存,分配内存为什么就会阻止常量折叠?
const int i;
const int j = i + 1;
long address = (long) &j; //语句3
语句3不也为j分配了内存吗,怎么就不会阻止常量折叠啊?
问题2:“众多的const在多个cpp文件内分配存储,容易引起连接错误”,当引用const的文件用extern声明时,不也照样可以连接吗?这就不会引起连接错误吗?
jadeinsea 2003-08-25
  • 打赏
  • 举报
回复
编程思想中的这段话:
“绝对不为任何const分配存储是不可能的,尤其对于复杂的结构。这种情况下,编译器建立存储,这会阻止常量折叠。这(有时会给常量分配内存)就是const为什么必须默认内部连接,即连接仅在特别编译单元内的原因;否则,由于众多的const在多个cpp文件内分配存储,容易引起连接错误,连接程序在多个对象文件里看到同样的定义就会“抱怨”了(发现同名的厂量)。然而,因为const默认内部连接,所以连接程序不会跨过编译单元连接那些定义,因此不会有冲突。”
wbh0360 2003-08-25
  • 打赏
  • 举报
回复
应该可以这么理解!
jadeinsea 2003-08-25
  • 打赏
  • 举报
回复
如果正确的话。
如何理解C++编程思想中的这句话(P125)“C++中的const默认为内部连接,也就是说,const仅在const被定义过的文件里才是可见的,而在连接时不能被其他编译单元看到”,并以引用其他文件中的一个变量为例,需要事先用const声明。
我觉得这句话和举例总有点蹩脚。应该举个函数的例子,而不是变量的例子,因为变量都是外部连接啊,而函数一般是外部连接。我这样理解对吗?
shawnshine 2003-08-25
  • 打赏
  • 举报
回复
我看这部分也有个不明白,顺便在这里问了,这段话的意思是什么呢?如果我在多个cpp里面都要用到几个固定的常量,我把它的定义写在一个头文件里面(即不加extern),然后多个cpp里面都include它,这样它会自动进行常量折叠吗?我的担心是这样做会不会造成多个编译单元都含有重复的对该const的内存分配?
jadeinsea 2003-08-25
  • 打赏
  • 举报
回复
没人知道?

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧