前提
C++における配列の初期化の仕様についての質問です。
実現したいこと
###ソースコード
C++
1auto* p0 = new int();2auto* p1 = new int[];3auto* p2 = new int[2];4auto* p3 = new int[2]{ 1, 2 };5auto* p4 = new int[] { 1, 2 };
VisualStudio 2019のコンパイラでは上記の5種類の定義のうち、p1とp4に
エラー C3078 新しい式に配列サイズを指定する必要があります
というエラーが生成されます。
このうち、p1がエラーになるのは、結局配列のサイズが不明なので理解できるのですが、p4もエラーになるのはなぜでしょう。
初期化指定子があるのでコンパイル時にサイズまでわかると思うのですが。
たぶん、規格上の理由があるか、VisualStudioのコンパイラの仕様上の都合だと思うのですが、どういった理由からそうなるのでしょうか。
0 コメント