删除复制构造函数中的 const

Dic*_*how 2 c++ copy-constructor copy-initialization

这是我最初所做的。

class A
{   public:
    A()         { std::cout << "\ndefault constructor";     }
    A(const A&) { std::cout << "\ncopy constructor";        }
    A(int)      { std::cout << "\nconversion constructor";  }
};

A a0;           // print default constructor
A a1(a0);       // print copy constructor       note : direct initialization
A a2 = a0;      // print copy constructor       note : copy initialization
A a3(123);      // print conversion constructor     note : direct initialization
A a4 = 123;     // print conversion constructor     note : copy initialization (create a temp object from int)
Run Code Online (Sandbox Code Playgroud)

但是,如果类 A 稍微修改如下(删除复制构造函数中的 const),为什么最后一行会出现编译错误?谢谢你

class A
{   public:
    A()         { std::cout << "\ndefault constructor";     }
    A(A&)       { std::cout << "\ncopy constructor";        }
    A(int)      { std::cout << "\nconversion constructor";  }
};

A a0;           // print default constructor
A a1(a0);       // print copy constructor       note : direct initialization
A a2 = a0;      // print copy constructor       note : copy initialization
A a3(123);      // print conversion constructor     note : direct initialization
//A a4 = 123;   // compile error
Run Code Online (Sandbox Code Playgroud)

R S*_*ahu 5

A a4 = 123;
Run Code Online (Sandbox Code Playgroud)

相当于

A a4 = A(123); // The RHS is a temporary A object.
Run Code Online (Sandbox Code Playgroud)

这适用于第一种情况,因为有一个构造函数将 aA const&作为参数类型。

如果参数类型是A&. 当参数类型为 时A const&,可以使用临时对象,而不是时A&