次の簡単なプログラムスニペットでは、gcc-4.3.4
でコンパイルエラーが発生します。整形式コードを指定せずに動的配列を割り当てていますか?
プログラム:
int main()
{
char *ptr = new char[10];
char *ptr1 = new char[];
return 0;
}
コンパイルエラー:
prog.cpp: In function ‘int main()’:
prog.cpp:4: error: expected primary-expression before ‘]’ token
prog.cpp:3: warning: unused variable ‘ptr’
prog.cpp:4: warning: unused variable ‘ptr1’
しかし、同じことは、診断メッセージを表示せずにMSVCできれいにコンパイルします。
だから私の質問は次のとおりです。
標準new []
がsize
を指定せずに呼び出すことができますか?またはこれはMSVCのバグですか?
誰かが、上記のコード例が不正であるか整形式であると結論づける標準からの参照を提供できますか?
5.3.4新しい[expr.new] &
18.4.1.2配列形式[lib.new.delete.array]
しかし、行動に関する決定的な証拠は見つかりませんでした。
EDIT:
Language Lawyer
タグを追加します。
有用かどうかにかかわらず、観察された動作の答えを期待していますが、私はそれが有用でも推奨でもないことを十分に認識しています。
合法であれば、私はそれのポイントを見ません... – Mehrdad
私はそれがどのようによく形成されたコードであるかわかりません?コンパイラは何をしようとしていますか、サイズを推測しますか?それはむしろ(不可能ではないにしても)難しいようです。 – Corbin
+1、面白い、良い答えを待っている。 – ApprenticeHacker