社区
C++ 语言
帖子详情
C++中const的连接特性
jadeinsea
2003-08-25 09:24:08
我理解是否正确:“在C++中,普通变量或对象默认的连接方式为内部连接,所以在其他文件中引用时候要用extern声明;而函数一般是外部连接(除inline、const外)”
上面的理解对吗?
...全文
81
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
代码
中
为什么使用
const
? 第一:采用符号常量写出的代码更容易维护; 第二:指针常常是边读边移动,而不是边写边移动; 第三:许多函数参数是只读不写的。
const
最常见用途是作为数组的界和switch分情况标号(也...
【C/
C++
】
const
详解,拿捏住了
用法5:
const
修饰成员函数(
c++
特性
) 具体展开来讲: (一). 常量与指针 (二):常量与引用 (三):常量函数 (四):常量返回值
c++
中
const
1.
const
常量 2.
const
修饰类的数据成员 3.
const
修饰指针的情况 4...
C/
C++
中
CONST
的意义
const
关键字来声明某个常量字段或常量局部变量。 常量字段和常量局部变量不是变量并且不能修改。 常量可以为数字、布尔值、字符串或 null 引用。 采用符号常量写出的代码更容易维护;指针常常是边读边移动,而不是...
const
在
c++
中
的作用
const
一个变量加上
const
修饰后,就变成了只读变量(不等于常量),一般不可以被修改。 比如:
const
int *p和int
const
*p两条语句等价,
const
修饰 *p,即 *p不可被修改, p可以被修改。
const
与宏常量的区别
const
...
C++
中
的
const
,位置很关键
const
修饰成员变量 修饰基本变量
const
int a完全等价于int
const
a 修饰指针 指针常量:
const
int * ptr等价于int
const
* ptr,不可以改变ptr所指向的内存区域的值,即*ptr = 1;...引用必须
连接
到一块
C++ 语言
64,648
社区成员
250,501
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章