用非const对象初始化const引用的后果?

tomyail 2009-10-29 05:20:01
C++ Primer(第四版)书上P157页有关于这个题目的解释:当使用非const对象初始化const对象的引用时,系统将非const对象转换为const对象。比如:
int i;
const int &j = i;//ok:convert non_const to reference to const int;
现在我的疑问是既然非const对象被转换为const对象了,为什么对其进行赋值操作还是合法的?
比如
#include<iostream>
using namespace std;
int main(){
int i;
//i=3;
const int &j= i;
i =20; //这句话为什么合法,i不是被转化为const对象了吗?
cout <<j<<" "<<i;//j,i都是20 - -!
system("pause");
return 0;
}
...全文
168 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigtankbigtank 2009-10-29
  • 打赏
  • 举报
回复
只有对被const修饰的引用操作才能保证对象不被修改,而直接操作对象进行修改在语法上是可以的,编译器不能保证直接操作对象时不修改对象。const修饰只保证视图上的不可写。
cba_v 2009-10-29
  • 打赏
  • 举报
回复
只是 产生一个中间变量 而已
Smile_Tiger 2009-10-29
  • 打赏
  • 举报
回复
i和j指向同一块地址缓冲区

当你用i访问则不受限制,用j访问就受const限制,这个在语法上很正常啊

;//ok:convert non_const to reference to const int;

的解释应该只是针对那条代码而说的吧
jackyjkchen 2009-10-29
  • 打赏
  • 举报
回复
这里的意思是说j这个引用固定引用i,不能再引用其他的,并不是说i不能修改了,你const的是j不是i

65,176

社区成员

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

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