C++关于引用问题

来源:互联网 发布:steam mac版怎么安装 编辑:程序博客网 时间:2024/05/19 07:11



(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
原创粉丝点击