[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.19 コンストラクタ式

GNU C はコンストラクタ式をサポートしている。 コンストラクタは、キャストと初期化子を組み合わせたように見える。 その値は、キャストにより指定された型のオブジェクトであり、 初期化子で指定された要素を持つ。

普通、型として指定するのは構造体である。 struct foostructure が以下のように宣言されていると しよう。

 
struct foo {int a; char b[2];} structure;

次の例では、struct foo をコンストラクタで構築している。

 
structure = ((struct foo) {x + y, 'a', 0});

これは、以下のように書いたのと同じである。

 
{
  struct foo temp = {x + y, 'a', 0};
  structure = temp;
}

また、配列をも構築することができる。コンストラクタの全要素が、 単純な定数式からなっており、初期化子として使うのに適していれば、 そのコンストラクタは左辺値であり、強制的にその先頭の要素へのポインタ とすることができる。以下に例を示す。

 
char **foo = (char *[]) { "x", "y", "z" };

要素が単純な定数でない配列コンストラクタはあまり役に立たない。 その場合、コンストラクタは左辺値ではないからである。 有効な使い方は二つだけである。それを添え字で参照すること、あるいは、 それで配列変数を初期化することである。 前者はおそらく switch 文を使うより遅くなる。 一方、後者は通常の C の初期化子と同じことをする。 以下に、配列コンストラクタの添え字参照の例を示す。

 
output = ((int[]) { 2, x, 28 }) [input];

スカラ型と共用体型に対するコンストラクタ式も許されるが、 その場合コンストラクタ式はキャストと等価になる。


This document was generated using texi2html 1.78.