2016-12-26 7 views
12

new int[8]()は、C++ 11のnew int[8]{}に相当しますか?言い換えれば"new int [8]()"はC++ 11の "new int [8] {}"と同等ですか?

はC++ 11標準保証new int[8]()new int[8]{}のそれぞれは、ゼロ初期化された配列を返していますか?

+0

私が読んだこれらの質問の多くは、委員会がブレースの構文が良い考えだと思った理由になります。 – Mehrdad

+1

@Mehrdad:だから、あなたはむしろヒープ割り当てする配列を値で初期化しますか? –

+0

@NicolBolas:あなたが最後にそれをする必要があったのはいつですか? C++ 11の前に何をしましたか? – Mehrdad

答えて

16

new int[8]()は、[dcl.init]/17.4までに値を初期化されます。これは配列なので、[dcl.init] /8.3は、配列を初期化するという値は、各要素の値を初期化することを意味します。

new int[8]{}は、[dcl.init.list] /3.2によって配列の集約初期化を呼び出します。 braced-init-listには要素がないので、配列の残りの要素(つまり:all 8)は "空の初期化子リスト"([dcl.init.aggr]/8)から初期化されます。 [dcl.init.list]をもう一度踊った後、3.4に進みます。これは、非集約型の「空の初期化子リストから」は値の初期化を意味します。

はい、どちらも同じことを評価します。

関連する問題