问一个关于const、指针和引用混合的问题(如果有人愿意详细讨论,我会加分)

antijpn 2003-07-09 07:17:01
这个问题来源于潘爱民和张丽合译的《C++ Primer 3e》
在第3.6节P88页中有这样一段话
"
const int ival=1024;
//仍然错误
const int *&pi_ref=&ival;
如果我们从左向右读这个定义,会发现pi_ref是一个指向定义为const的int型对象的指针。我们的引用不是指向一个常量,而是指向一个非常量指针,指针指向一个const对象。正确的定义如下:
const int ival=1024;
//OK:这是可以被编译器接受的
const int *const &pi_ref=&ival;
"

在const int *const &pi_ref=&ival这个语句中,pi_ref明显是一个const引用,而const引用应该是指向内存中的一个临时变量。按照C++ Primer中的解释这个临时变量应该是一个非常量指针?而非常量指针又如何指向一个const对象呢?难道其中有强制类型转换?
...全文
39 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
antijpn 2003-07-11
  • 打赏
  • 举报
回复
难道是没有人看明白我的意思?这样吧,如果愿意讨论的人把MSN或者QQ留给我,我实在需要详细的讨论(高分酬谢)
antijpn 2003-07-10
  • 打赏
  • 举报
回复
没人和我讨论了吗?
antijpn 2003-07-09
  • 打赏
  • 举报
回复
可能出现,但是有的编译器根本不允许这样的代码通过,BCB5.5Complier会警告使用了临时变量
MaiCle 2003-07-09
  • 打赏
  • 举报
回复
int &i = 345; -- 这样的代码有没有可能在程序中出现?
antijpn 2003-07-09
  • 打赏
  • 举报
回复
问题不在于原因,而在于结果,我说的是在程序中根本不可能出现一个引用指向一个常量这种情况。而不是讨论为什么不允许出现这种情况。

根据我的判断,我得出的结论是C++ Primer中的“我们的引用不是指向一个常量”可以说根本就是一句废话,没有意义,因为根本不可能出现一个引用指向一个常量这种情况。

我现在需要的是别人来看我的这个结论是否正确,而不是要知道为什么不允许这种情况出现
MaiCle 2003-07-09
  • 打赏
  • 举报
回复
这个你要辩证的来理解了,为什么不能让可变的指针来指向一个不可变的变量呢?道理很简单。

引用和指针都会引起他们所引用的值或指向的值改变,而那值又是不希望被改变的,所以很危险,因此编译器会考虑这些情况而不让使用。
antijpn 2003-07-09
  • 打赏
  • 举报
回复
在BCB5.5 Complier里面这样是可以的,不过编译器会警告使用了临时变量
MaiCle 2003-07-09
  • 打赏
  • 举报
回复
antijpn(antijpn):所以说不可以使用:const int *&pi_ref=&ival;这种方法。
antijpn 2003-07-09
  • 打赏
  • 举报
回复
MaiCle(【不拉马的士兵】)

我认为&ival被编译器作为一个常量看待,所以它不会随pi_ref改变而改变

point_to(一 指)

就是因为以前没有讨论明白,所以现在才要继续讨论
antijpn 2003-07-09
  • 打赏
  • 举报
回复
那再帮我看一下这一段话

在我的观点中,任何一个引用都不可能指向一个常量。不知道对不对?
我作出这个推断的依据是,如果在定义引用的时候使用了const关键字,那么编译器会在内
存中生成临时变量,然后把引用指向这个临时变量,这个变量是可以更改的,那么显然这
个引用没有指向一个常量。而如果不用const关键词,那么编译器会报错或者警告使用了临
时变量。那么这个引用还是没有指向一个常量。由此可以看出const关键字在引用的定义中
,起到的作用应该是通知编译器生成临时变量。而C++ Primer中的“我们的引用不是指向
一个常量”可以说根本就是一句废话。
MaiCle 2003-07-09
  • 打赏
  • 举报
回复
当你这样使用时:const int *&pi_ref=&ival;

改变pi_ref是必会改变ival的地址,这是不可以的。
point_to 2003-07-09
  • 打赏
  • 举报
回复
呵呵!
一个人!^_^
point_to 2003-07-09
  • 打赏
  • 举报
回复
以前讨论过!
==

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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