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

private: 
    int i; 
}; 

A a[8]; 

的C++ 11標準8.5.1.1說:是任何類型的數組總是聚合?

「的聚集物是與沒有用戶提供的構造(12.1),無支架或 - equalinitializers用於陣列或類(第9節)非靜態數據成員(9.2),沒有私有或受保護的非靜態數據成員(第11章),沒有基類(第10章),也沒有虛擬函數(10.3)。

作爲一個數組,是一個聚合?我認爲不是,但標準說是。

+11

如果標準是這樣說的話,標準將獲得勝利:) – Gorpik

+1

@Gorpik所有人都歡呼hipno標準! :D –

回答

14

是的,A[8]是一個聚合類型,即使A不是。

與其他一些相關概念(如「可複製的」)不同,聚集的概念不是傳遞的。總的來說,作爲一個聚集隻影響類型的初始化,因此它不需要是傳遞的。您可以說A a[2] = { A('x', true), A(1, 2, 3) };,而不需要限制A的性質。相比之下,瑣碎可複製性等概念與類的內存佈局有關,因此其本質必須是傳遞性的。

+0

@ BenVoigt:確實。我檢查了它。我錯了。 – Nawaz