Xét đoạn mã sau:Việc liên kết tạm thời với một tham chiếu có yêu cầu một hàm tạo bản sao trong C++ không?
class A {
A(const A&);
public:
A() {}
};
int main() {
const A &a = A();
}
Mã này biên dịch tốt với GCC 4.7.2, nhưng thất bại trong việc biên dịch với Visual C++ 2010 với các lỗi sau:
test.cc(8) : error C2248: 'A::A' : cannot access private member declared in class 'A'
test.cc(2) : see declaration of 'A::A'
test.cc(1) : see declaration of 'A'
Vậy là nó cần thiết để có một constructor sao chép có thể truy cập khi liên kết một tạm thời với một tham chiếu?
này có phần liên quan đến câu hỏi trước đây của tôi:
Is there a way to disable binding a temporary to a const reference?
Có, bản sao ctor là riêng tư và không được triển khai cố ý. – vitaut
Bạn đã thử chỉ 'A(). 'Có thể nó cần hàm tạo bản sao để sao chép từ bên trong hàm đến giá trị trả về. –
Visual C++ 2012 chấp nhận mã. –