【发布时间】:2012-04-04 14:53:15
【问题描述】:
下面的简单程序 sn-p 给出了 gcc-4.3.4 的编译错误。
计划:
int main()
{
char *ptr = new char[10];
char *ptr1 = new char[];
return 0;
}
编译错误:
prog.cpp:在函数“int main()”中:
prog.cpp:4:错误:“]”标记之前的预期主表达式
prog.cpp:3:警告:未使用的变量“ptr”
prog.cpp:4:警告:未使用的变量“ptr1”
但是使用 MSVC 可以干净地编译,没有任何诊断消息。
所以我的问题是:
标准是否允许在不指定 size 的情况下调用 new []?或者这是 MSVC 中的错误?
有人可以提供来自标准的参考,最终会说上面的代码示例格式错误或格式正确吗?
我看过了:
5.3.4 新 [expr.new] &
18.4.1.2 数组形式 [lib.new.delete.array]
但找不到任何关于该行为的确凿证据。
编辑:
添加Language Lawyer 标签。
我期待观察到的行为的答案,无论它是否有用,我完全知道它没有用也不推荐。
【问题讨论】:
-
如果它是合法的,我不明白它的意义......
-
我看不出它怎么可能是格式良好的代码?编译器会做什么,猜猜大小?这似乎相当困难(如果不是不可能的话)。
-
+1,有趣,等待好的答案。
-
new char[]是否分配内存?我认为它只创建一个指针
标签: c++ new-operator language-lawyer