配列メンバーを自己参照的に初期化できますか? 質問する

配列メンバーを自己参照的に初期化できますか? 質問する

Dの別の部分に基づいての一部を初期化する次のコードを考えてみますD

struct c {
    c() : D{rand(), D[0]} {}
    int D[2];
};

int main() {
    c C;
    assert(C.D[0] == C.D[1]);
}

上記のプログラムは適切に定義されていますか? 同じ配列の一部を使用して別の部分を安全に初期化できますか?

ベストアンサー1

集合体 (配列を含む) が中括弧付きリストから初期化される場合、集合体の各要素はリストの対応する要素から初期化されます (「増加した添え字またはメンバーの順序で」)。各要素の初期化が前の要素の後に順序付けられるという正確なルールは見つかりませんが、標準には、これが意図された意味であることを明確に示す例があります。例は [dcl.init.aggr] にあります。

struct S { int a; const char* b; int c; int d = b[a]; };
S ss = { 1, "asdf" };

は、、形式の式の値(つまり)、およびの値(つまり)ss.aで初期化されます。1ss.b"asdf"ss.cint{}0ss.dss.b[ss.a]’s’

おすすめ記事