Giả sử tôi có như sau (không hợp lệ) mã:C++ Constructor bởi Value
struct A {
A(A) {};
};
MSVC mang lại cho tôi:
error C2652: 'A' : illegal copy constructor: first parameter must not be a 'A'
Tại sao trình biên dịch phát hiện này như constructor sao chép, và không phải là một nhà xây dựng thường xuyên ?
Chương 12.8.2 của ++ Chuẩn C nói:
A non-template constructor for class X is a copy constructor if its first parameter is of type X& , const X& , volatile X& or const volatile X&
Tôi mong rằng trình biên dịch phát hiện các phương pháp trên như constructor thường xuyên, giống như
struct A {
A(B) {};
};
trong khi B là một lớp khác.
Hành vi này được xác định ở đâu?
trên GCC 4.9.2, lỗi: constructor không hợp lệ; bạn có thể có nghĩa là 'A (const A &)' –
Có lẽ vì đây là một lỗi đủ phổ biến khi mọi người cố gắng tạo một hàm tạo bản sao của riêng mình mà MSVS cố gắng trở nên tốt đẹp và cho họ biết. – NathanOliver
@NathanOliver: Tôi thích điều đó. – Bathsheba