2011-08-29 30 views
11

GCC 4.5 không cho phép tôi làm điều này:Tôi có thể mặc định một hàm tạo riêng trong phần thân lớp hay không?

class foo { 
public: 
    foo() = default; 

private: 
    foo(foo const&) = default; 
    foo& operator=(foo const&) = default; 
}; 

Nó phàn nàn rằng:

error: 'foo::foo(const foo&)' declared with non-public access cannot be defaulted in the class body
error: 'foo& foo::operator=(const foo&)' declared with non-public access cannot be defaulted in the class body

Tuy nhiên, GCC 4.6 cho phép tôi làm điều đó. Cái nào đúng?

Trả lời

10

Không có gì trong N3291 nói rằng bạn không thể khai báo điều gì đó privatedefault. Lưu ý rằng đây là thay đổi đối với đặc điểm kỹ thuật, trong mục 8.4.2, đoạn 2; các phiên bản trước đó nói rằng chúng phải được công khai.

+0

Đôi khi nó chỉ là tốt đẹp để được mặc định trong tư nhân ... –

+4

"Đi bộ trên mặt nước và phát triển phần mềm từ một đặc điểm kỹ thuật rất dễ dàng nếu cả hai đều bị đóng băng." - E. Berard. –

Các vấn đề liên quan