image.png
    起初我的编码是这样的

    1. #include <iostream>
    2. #include <cstring>
    3. using namespace std;
    4. class A
    5. {
    6. public:
    7. int val;
    8. A(int v) : val(v) {}
    9. A() : val(123) {}
    10. int &GetObj() { return *this; } // 注意在这里用的是 int&
    11. };
    12. int main()
    13. {
    14. int m, n;
    15. A a;
    16. cout << a.val << endl;
    17. while (cin >> m >> n)
    18. {
    19. a.GetObj() = m;
    20. cout << a.val << endl;
    21. a.GetObj() = A(n); // 这里编译报错
    22. cout << a.val << endl;
    23. }
    24. return 0;
    25. }
    • 由于转换构造函数是指将其他类型转换为该类型A,而不能将A转换为别的类型(int, double…)也就导致了下面位置的报错
    • 所以上面正确的类型应该是 A &