社区
C++ 语言
帖子详情
C++中const的连接特性
jadeinsea
2003-08-25 09:24:08
我理解是否正确:“在C++中,普通变量或对象默认的连接方式为内部连接,所以在其他文件中引用时候要用extern声明;而函数一般是外部连接(除inline、const外)”
上面的理解对吗?
...全文
155
6
打赏
收藏
C++中const的连接特性
我理解是否正确:“在C++中,普通变量或对象默认的连接方式为内部连接,所以在其他文件中引用时候要用extern声明;而函数一般是外部连接(除inline、const外)” 上面的理解对吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
没人知道?
关于
C++
关键字
const
的记录
说明:为什么标题是关于
C++
const
的记录,而不是C/
C++
关于
const
的记录.这是因为C语言的
const
和
C++
的
const
是有点区别的.至于什么区别,用一句话来说就是:
C++
中
的
const
默认认为是内部
连接
,也就是说
const
仅在
const
被定义过的文件里才是可见的,而在
连接
时不能被其他编译单元看到.C语言的
const
默认认为时外部
连接
.这里主要讨论
C++
的
const
,C语言的
const
等需要的时候在仔细研究研究.默认的定义
const
,编译器是不会给
const
创建存储空间的,但有两个例外:这两种
C++
中
const
总结
对于基本声明1.
const
int r=100; //标准
const
变量声明加初始化,因为默认内部
连接
所以必须被初始化,其作用域为此文件,编译器经过类型检查后直接用100在编译时替换2. extend
const
int r=100; //将
const
改为外部
连接
,作用于扩大至全局,编译时会分配内存,并且可以不进行初始化,仅仅作为声明,编译器认为在程序其他地方进行了定义3
关于常量
const
1、
C++
中
的
const
默认为内部
连接
,即
const
仅在
const
被定义过的文件里才是可见的,而在
连接
时不能被其他编译单元看到,除非使用extern显式说明为外部
连接
。 2、定义一个
const
时,必须赋一个初值给它,除非使用extern做了清楚的说明。 3、使用extern意味着使用外部
连接
,因此必须分配存储空间,即有几个不同的编译单元应当能够引用它,所以必须分配存储空间。 4、
const
可
const
在C和
C++
中
的区别
const
在C和
C++
中
的区别
C++
中
的
const
正常情况下是看成编译期的常量,编译器并不为
const
分配空间,只是在编译的时候将期值保存在名字表
中
,并在适当的时候折合在代码
中
. 所以在
C++
中
const
修饰的量可以用在数组的定义
中
。 而在C
中
,
const
是一个不能被改变的普通变量,既然是变量,就要占用存储空间,所以编译器不知道编译时的值.而且,数组定义时的下标必须为常量. 在C语言
中
: co...
Thinking in
C++
【7】常量
Const
1.值替代 预处理器的工作:预处理器只做文本替代,无类型检查概念,也无类型检查功能。预处理器在C
中
用值替代的典型用法是宏定义:#define BUFSIZE 100 缺点:变量无类型信息,会隐藏一些很难发现的错误。 编译器的工作:使用
const
const
int bufsize = 100; 2.头文件里的
const
无论是使用**#define还是
const
**,都要把它们放在头文件里。通过包含头文件,可以把
const
定义单独放在一个地方并把它分配一个编译单元。
const
默认为内部
连接
,即
C++ 语言
65,210
社区成员
250,515
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章