2012-12-20 23 views
11
class A 
{ 
public: 
    A(){} 

private: 
    int i; 
}; 

A a[8]; 

C++ 11 tiêu chuẩn 8.5.1.1 nói:Là một mảng của bất kỳ loại luôn luôn là một tổng hợp?

"Một tổng hợp là một mảng hoặc một lớp học (khoản 9) không có nhà xây dựng người dùng cung cấp (12.1), không có cú đúp-hoặc-equalinitializers cho thành viên dữ liệu không tĩnh (9.2), không có thành viên dữ liệu không được bảo mật hoặc riêng tư (Điều 11), không có lớp cơ sở (Điều 10) và không có chức năng ảo (10.3). "

Là một mảng, là một tổng hợp? Tôi nghĩ không, nhưng tiêu chuẩn nói có.

+11

Nếu tiêu chuẩn nói như vậy, tiêu chuẩn sẽ thắng :) – Gorpik

+1

@Gorpik Tất cả mưa đá theo tiêu chuẩn hipno! : D –

Trả lời

14

Có, A[8] là loại tổng hợp, mặc dù A thì không.

Khái niệm tổng hợp không phải là chuyển tiếp, không giống như một số khái niệm liên quan khác (chẳng hạn như "có thể sao chép một cách trivially").

Nói một cách lỏng lẻo, là tổng hợp chỉ ảnh hưởng đến việc khởi tạo loại và do đó nó không cần phải chuyển tiếp. Bạn có thể nói A a[2] = { A('x', true), A(1, 2, 3) }; mà không cần đặt giới hạn về bản chất của A. Ngược lại, các khái niệm như khả năng sao chép tầm thường liên quan đến bố trí bộ nhớ của một lớp và do đó bởi bản chất của chúng phải là chuyển tiếp.

+0

@BenVoigt: Đúng. Tôi đã kiểm tra nó. Tôi đã sai. – Nawaz

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