C++问题

来源:互联网 发布:网络暴走好声音 编辑:程序博客网 时间:2024/05/22 13:32


(a)Sales_data &conbine(Sales_data );
(b)Sales_data &conbine(Sale_data &);

当我们调用i.conbine(s)的时候:
s是个字符串,当构造函数没有加explicit会隐士转换成类对象
(a)是正确的  编译器首先为s生成一个Sales_data对象,然后将这个临时对象
传递给conbine做参数
(b)无法编译通过  因为conbine的参数是一个非常量的引用,而s是个string对象,
编译器用s生成一个Sales_data临时对象,这个临时对象时无法传递给conbine参数的.
如果我们把函数声明修改为
Sales_data &conbine( const Sales_data&)就正确了
因为生成的临时对象是右值,不能初始化非常量引用.

int &reft; //引用只能引用左值,他是个会变的,所以不能引用右值
const int &ref;//引用既可以引用左值,也可以引用右值

0 0
原创粉丝点击