Tôi đang truyền một đối tượng tạm thời chưa được đặt tên cho một hàm được xác định với tham số const ref. Ctor bản sao của lớp là riêng tư, và tôi nhận được một lỗi biên dịch. Tôi không hiểu tại sao một nhà xây dựng bản sao được gọi trong tình huống này.lý do tại sao sao chép constructor được gọi là khi đi qua tạm thời bởi tham chiếu const?
class A {
public:
A(int i) {}
private:
A(const A&) {}
};
void f(const A& a)
{
}
int main()
{
f(A(1)); // <-- error here: 'A::A(const A&)' is private
}
Đúng như dự đoán, khi tôi thay đổi chính:
A a(1);
f(a);
nó hoạt động.
EDIT: trình biên dịch là gcc 4.1.2
Bạn đang sử dụng trình biên dịch nào? – sharptooth
VC++ 9 rất vui khi biên dịch biến thể đầu tiên. – sharptooth
@sharptooth: gcc, tôi sẽ cập nhật – davka