C Language複合リテラル


構文

  • (型){initializer-list}

備考

Cの標準はC11-§6.5.2.5/ 3で述べている:

カッコで囲まれた型名の後に中カッコで囲まれたイニシャライザのリストが後置された式は複合リテラルです。それは初期化子リストによって値が与えられる無名のオブジェクトを提供します。 99)

そして脚注99によると:

これはキャスト式とは異なります。たとえば、キャストはスカラ型またはvoidのみへの変換を指定し、キャスト式の結果は左辺値ではありません。

ご了承ください:

文字列リテラルとconst修飾型の複合リテラルは、別個のオブジェクトを指定する必要はありません。 101)

101)これにより、実装は、文字列リテラルおよび定数複合リテラルのストレージを、同じまたは重複する表現で共有することができます。

例は標準で与えられます:
C11-§6.5.2.5/ 13:

文字列リテラルと同様に、const修飾された複合リテラルは読み取り専用メモリに置くことができ、共有することもできます。例えば、

(const char []){"abc"} == "abc"

リテラルのストレージが共有されている場合は1が返されます。

複合リテラル 関連する例