Vì vậy, về cơ bản mã này:Tại sao hàm tạo bản sao được gọi thay vì hàm tạo chuyển đổi?
class A {
};
class B {
B (const B& b) {}
public:
B(){}
B (const A& a) {}
};
int main()
{
A a;
B b1(a); //OK
B b2 = a; //Error
}
chỉ tạo ra một lỗi cho B b2 = a
. Và lỗi đó là
error: ‘B::B(const B&)’ is private
Tại sao nó cố gắng gọi hàm tạo bản sao bên cạnh hàm tạo chuyển đổi trực tiếp?
Rõ ràng từ thông báo lỗi rằng tạm thời B
được tạo sau đó được sử dụng để sao chép-xây dựng, nhưng tại sao? Cái này ở đâu trong tiêu chuẩn?
Is câu hỏi của bạn liên quan đến cơ hội này [http://stackoverflow.com/questions/11221242/is-this-a-copy-constructor)? :) –
@EitanT sao bạn biết? –
Bởi vì tôi đã xem xét câu hỏi đó vài phút trước :) –