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

浏览:38日期:2023-06-04

问题描述

这是书中的一道题目,为什么就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);}

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

问题解答

回答1:

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

回答2:

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

相关文章: