关于指向const变量的非const引用

Dan1980 2006-08-14 01:25:16
有的教材上说:如果定义一个非const引用,并将它指向一个const变量,那么编译器会创建一个临时变量,将const变量的值复制给临时变量,再将该引用指向那个临时变量。

但是我用g++编译下面的代码:

const int i = 10;
int &ir = i;

编译器提示错误:invalid initialization of reference of type 'int&' from expression of type 'const int'

说明不能用const int变量来初始化非const引用。

是不是教材有问题?标准又是怎么规定的呢?
...全文
324 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dan1980 2006-09-15
  • 打赏
  • 举报
回复
没有得到满意的回复,郁闷ing...
Dan1980 2006-08-14
  • 打赏
  • 举报
回复
楼上的,“const变量”是有这一说的,就是不能被修改的变量,并不是所有const修饰的都是常量,比如某个类的const实例,难道也是常量?
阿发伯 2006-08-14
  • 打赏
  • 举报
回复
genius_hb(本人很差) :
怎么感觉怪怪的,说反了吧~~~~~~~~~~好象也不对。

因为有些话说得好笑,所以怪怪的。如什么:

不能引用const的变量,因为变量是const的。。。。

既然是const变量,就不允许修改它的值。。。。。


const定义的是常量,而常量是不允许改变的;变量是能够改变的。为什么要说“const变量”
benh 2006-08-14
  • 打赏
  • 举报
回复
这段话有没有上下文?如果单看这段话,应该是不对的。
triace_zhang 2006-08-14
  • 打赏
  • 举报
回复
非const引用指向const常量直接是不行的,需要强制转化

const int i = 10; //这儿编译器不会给i 分配存储空间
int &ir = (int &)i; //强制转化之后,编译给i分配一个栈存储空间。
ir = 5; //改变该空间的值
cout << ir << endl;
cout << i << endl; //这儿编译器并不从该空间取值,而是从常量表中采用常量折叠直接
//用10替换。
genius_hb 2006-08-14
  • 打赏
  • 举报
回复
怎么感觉怪怪的,说反了吧~~~~~~~~~~好象也不对。

但大概就是反了。。。。。
chenhu_doc 2006-08-14
  • 打赏
  • 举报
回复
恩, 楼上的方法可以!
pstinghua 2006-08-14
  • 打赏
  • 举报
回复
int& ref = const_cast<int&>i; //强制去掉原变量的const属性
ref = 4; //现在可以通过引用改变原变量的值
ckt 2006-08-14
  • 打赏
  • 举报
回复
既然是const变量,就不允许修改它的值.
你使用非const引用变量来指向const变量,
const变量的值可能被修改,就不合法了
rollor_phoe 2006-08-14
  • 打赏
  • 举报
回复
不能引用const的变量,因为变量是const的,如果你引用不是const的话,就可以通过引用来修改变量的值,而变量是const,不能修改,所以C++语法中是不允许这样引用的,会提示错误。

64,644

社区成员

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

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