您的位置:程序门 -> c/c++ -> c++ 语言



再次求救 关于临时地址初始化引用


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


再次求救 关于临时地址初始化引用
发表于:2008-01-14 13:19:31 楼主
,不好意思打扰了,我是一个c++初学者,
我在书本中看到这一段,
#include <iostream.h>
int   &heh(   int&   a,int&   b);
void   main()
{long   a=2.33,b=2.65;
cout < <heh(static_cast <int> (a),static_cast <int> (b));
}
int   &heh(int&   a,   int&   b)
{return   a> b   ?a:b;
}

提示:这里涉及到了long类型转为int   型提示:好像是编译器没有准备使用临时地址来初始引用,heh()的代码可以自由控制对引用参数的进行的操作,必须把参数声明为const.
能告诉我为什么:“经过类型转变以后,编译器没有准备使用临时地址来初始引用,heh()的代码可以自由控制对引用参数的进行的操作”吗?我怎么想也想不通,麻烦您了,我是不是因该去了解一下内存的地址分布呀,呵呵
此致
发表于:2008-01-14 13:24:431楼 得分:0
很明显啊,static_cast   <int>   (a)这个东西显然是临时的,因为他不是变量。
发表于:2008-01-14 13:26:072楼 得分:0
引用时不能用临时变量初始化的,因为临时的就一定会被释放掉,到时候这个引用就没有意义了。
发表于:2008-01-14 13:31:093楼 得分:0
取临时变量的引用是非法的操作,   但是临时变量的常量引用是合理的.

static_cast <int> (a)产生的是一个临时变量,   所以你取他的引用,   编译器就报错了.
把你的函数定义成   const   int&   heh(const   int&   a,   const   int&   b)就可以了.
发表于:2008-01-14 13:54:244楼 得分:0
我还望了题   上提示的错误是c2664:   'heh'   :   cannot   convert   parameter   1   from   'int'   to   'int   &'               您能帮我解释一下,可以吗,,我觉得     int   型可以给int   &   赋值呀,请指点一下好吗?


还有帮我解释一下楼上的回复好吗?   我试了一下(别笑我,我知道我市菜鸟,呵呵)
,,,,
,,,
{   int   &a=2;}   也提示cannot   convert   parameter   1   from   'int'   to   'int   &'     如果根据楼上,因该不会有这样的错误提示呀,很抱歉小弟未能理解楼上的意思,望明示
发表于:2008-01-14 14:24:385楼 得分:0
int       &a=2;改为
int   b=2;
int       &a=b;
发表于:2008-01-14 14:25:406楼 得分:0
或者改为:
const   int       &a=2;


快速检索

最新资讯