>>113 オブジェクトの定義に対して初期化子を与えると、オブジェクトの初期値を 決定することになるが、初期化子には次の4種類ある : T a{b}; T a={b}; T a = v; T a(v); ・このうち、あらゆる局面で利用できるのは、最初の T a{b}の形式のみ (なおこの形式はC++11で新しく導入された。)。 ・一番大きな理由はこの形式は「縮小変換を許さないから」とされる。
ただし、ややこしいのが、Tの部分を autoにした場合は、T a{b}の形式は 落とし穴がされるので使うべきではないとされている。 なぜなら: auto z1{99]; // z1は initializer_list<int>型になってしまう。 auto z2 = 99; // z2は、int型。
ところが、Tが具体的な型の場合には、T a{b} が推奨される: int x1{99}; // 推奨される書き方。 int x1 = 99; // 縮小変換があるので推奨されない書き方。