c++隐式的类类型转换问题

这是书中的一道题目,为什么就combine2不能转换,而combine1和3就没问题?

#include <string>

using namespace std;

class Sales_data {

public:

Sales_data() = default;

Sales_data(const string& str) :data(str) {}

Sales_data &combine1(Sales_data a) {}

Sales_data &combine2(Sales_data& a) {}

Sales_data &combine3(const Sales_data& a)const {}

private:

string data;

};

int main()

{

string str = "hello";

Sales_data item("9-999-99999-9");

item.combine1(str);

item.combine2(str);//error:无法将参数 1 从“std::string”转换为“Sales_data &”

item.combine3(str);

}

图片描述

回答:

隐式转换中产生临时对象,是右值,而
引用只能绑定到左值,const引用还能绑定到右值

回答:

不妨再看一下《快速了解C/C++的左值和右值》
http://segmentfault.com/a/1190000003793498

以上是 c++隐式的类类型转换问题 的全部内容, 来源链接: utcz.com/p/191303.html

回到顶部