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

private: 
    int i; 
}; 

A a[8]; 

C++ 11標準の8.5.1.1は言う:任意の型の配列は、常に集約ですか?

「凝集体がないユーザ提供コンストラクタ(12.1)、なしブレース-OR-equalinitializersの配列またはクラス(項9)であります非静的データメンバ(9.2)、非公開または保護された非静的データメンバ(11章)、基本クラスなし(10節)、仮想関数なし(10.3)

aは配列なので、集合体ですか?私はそうではないと思うが、標準は「はい」と言っている。

+11

スタンダードがそうだとすれば、スタンダードは勝ちます:) – Gorpik

+1

@Gorpikオールヒールのヒップノースタンダード! :D –

答えて

14

はい、Aではありませんが、A[8]は集約タイプです。

集約の概念は、他の関連する概念(「trivially copyable」など)とは異なり、推移的ではありません。

大まかに言えば、集合体であることは型の初期化にのみ影響するため、推移的である必要はありません。 Aの性質に制限を設けることなく、A a[2] = { A('x', true), A(1, 2, 3) };と言うことができます。対照的に、自明なコピー可能性のような概念は、クラスのメモリレイアウトに関連しているため、その性質上、推移的でなければなりません。

+0

@BenVoigt:True。私はそれをチェックした。私は間違っていた。 – Nawaz

関連する問題