搜尋

首頁  >  問答  >  主體

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<code>#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);

}

</code>

巴扎黑巴扎黑2810 天前507

全部回覆(2)我來回復

  • ringa_lee

    ringa_lee2017-04-17 12:10:43

    隱式轉換中產生臨時對象,是右值,而
    引用只能綁定到左值,const引用還能綁定到右值

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 12:10:43

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

    回覆
    0
  • 取消回覆