免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2516 | 回复: 8
打印 上一主题 下一主题

它是一个临时值不能被用来初始化非const 型的引用.....求解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-27 10:59 |只看该作者 |倒序浏览
下面是在引用参数与实参之间没有匹配的另外一个例子
class B;
void takeB( B& );
B giveB();
int main() {
takeB( give() ); // 错误: 参数必须是 const B&
return 0;
}
对takeB()的调用是错误的实参是函数调用的返回值它是一个临时值不能被用来初
始化非const 型的引用


它是一个临时值不能被用来初
始化非const 型的引用.....怎么解释呢。。谢谢

论坛徽章:
0
2 [报告]
发表于 2005-10-27 11:03 |只看该作者

它是一个临时值不能被用来初始化非const 型的引用.....求解

引用必须一直有所指,临时对象完成任务之后就被销毁了~~

论坛徽章:
0
3 [报告]
发表于 2005-10-27 12:04 |只看该作者

它是一个临时值不能被用来初始化非const 型的引用.....求解

那为什么Const型的可以??
-_-!!!!

论坛徽章:
0
4 [报告]
发表于 2005-10-27 12:25 |只看该作者

它是一个临时值不能被用来初始化非const 型的引用.....求解

give()的返回值只是一个值,不是一个变量;如果作为一个引用参数,应该会生成一个临时变量,复制这个返回值;临时变量作为只读应该是没有问题的。

论坛徽章:
0
5 [报告]
发表于 2005-10-27 12:27 |只看该作者

它是一个临时值不能被用来初始化非const 型的引用.....求解

自己慢慢理解吧  当时我看到这里的时候也是好疑惑

现在自己是懂了 不知道能不能让你明白

这里你引用的是即将消失的对象(临时变量)的引用  这样的改变对你(程序员)来说没有任何好处  所以编译器将这里标记为错误吧!

论坛徽章:
0
6 [报告]
发表于 2005-10-27 12:29 |只看该作者

它是一个临时值不能被用来初始化非const 型的引用.....求解

变量所在的位置不同。函数返回临时变量的时候你不用值去接收,以后哪个变量就消失了。所以楼主的程序是不行的。
常量就可以了。
如果加const  表示你引用的是一个常量。那当然可以了。

论坛徽章:
0
7 [报告]
发表于 2005-10-27 13:19 |只看该作者

它是一个临时值不能被用来初始化非const 型的引用.....求解

谢谢各位。
不过还是没能理解
就像 const 型的引用一定要有初值
这里 const 型既然是常量了。难道说因为它是const型的引用 那么给他的临时型值就会固定下来了。。不消失了?
------------------------------------
             真难表达阿~~~

论坛徽章:
0
8 [报告]
发表于 2005-10-27 14:22 |只看该作者

它是一个临时值不能被用来初始化非const 型的引用.....求解

非const型的函数引用参数一般是作为输出参数的吧?你怎么能输出到一个临时变量里呢?无效代码。

论坛徽章:
0
9 [报告]
发表于 2005-10-27 20:29 |只看该作者

它是一个临时值不能被用来初始化非const 型的引用.....求解

giveB():定义的返回值对象肯定是临时对象。
C++规定:不允许非const 引用指向需要临时对象的对象或值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP