検索しても見つからなかったので。
C++では変数宣言時に初期化ができる。で、クラスならコンストラクタがあるが(デフォルトコンストラクタも含む)、その他はどうなのかという話。(たとえばint型とか)
規格では8.5Initializersに規定されている。それによるとint a();とか書くとvalue-initializeされる。
value-initializeとはクラスや配列以外ならばzero-initializeが行われると規定されている。
zero-initializeはscalar type(おおざっぱに言えば整数型やポインタ)では0に変数を初期化するとある。
つまり
int a(); //a <- 0
となる。
これがあるので、たとえばstd::mapで
std::map< int, int > m;
m[0];
とかすると、zero-initializeが行われ、m[0]が0になる。
※追記
後輩から指摘されてしまった。
int a(); //type of a is int (*)()宣言では空のパラメータを書いたときは、関数宣言とみなされることを失念していた。
宣言以外では、以下のようにかける。(右辺)
int a = int();
ところで
int a; // a have an indeterminate initial valueでいいのだろうか。