12
class A 
{
public:
    A(){}

private:
    int i;
};

A a[8];

C++11標準8.5.1.1は次のように述べています。

「アグリゲートは、ユーザー提供のコンストラクター(12.1)、非静的データメンバー用のブレースまたはイコールイニシャライザー(9.2)、プライベートまたは保護された非静的データメンバー(Clause)を含まない配列またはクラス(Clause 9)です。 11)、基本クラスなし(10節)、仮想関数なし(10.3)。」

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

4

1 に答える 1

15

はい、そうではありませんA[8]が、集約型Aです。

集約の概念は、他の関連する概念(「自明にコピー可能」など)とは異なり、推移的ではありません。

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

于 2012-12-20T15:27:11.210 に答える