c++ 数组初始化问题

2019-05-07 00:21:58 +08:00
 void59468

https://en.cppreference.com/w/cpp/language/new

double* p = new double[]{1,2,3};

在 cppreference 上看有这种初始化方式,但编译通不过,所以是上面写错了还是编译器实现问题?

2829 次点击
所在节点    程序员
15 条回复
MeteorCat
2019-05-07 00:29:02 +08:00
g++版本问题,看下是不是 c++11
wevsty
2019-05-07 00:51:33 +08:00
试了一下
GCC 9.1,MSVC 19.20 ,clang 8.0 都提示编译错误。

其中 MSVC 的提示很清楚
```
<source>(2): error C3078: array size must be specified in new expressions
```

应该是这种写法本身错误或者没有任何编译器选择支持。
feng0vx
2019-05-07 01:09:30 +08:00
隐约记得可以初始化前面几个,所以还是楼上说的那样,声明数组大小
ysc3839
2019-05-07 02:12:31 +08:00
@wevsty MSVC 要手动开启新特性的,你确定有开?
lrxiao
2019-05-07 05:22:58 +08:00
大概是没有一个编译器实现了这种写法...这写法大概 03 就有了吧
mirrorman
2019-05-07 07:22:02 +08:00
new 的运算符如果没有重载成有列表初始化参数的函数那这个就是错误的,我觉得这个地方有点和 RAII 矛盾
iAcn
2019-05-07 07:38:58 +08:00
应该是没有给定动态数组的大小。
ylrshui
2019-05-07 08:31:36 +08:00
看清楚 cppreference 示例前的说明,意思是这种写法不可用
ylrshui
2019-05-07 08:32:35 +08:00
SeaRecluse
2019-05-07 08:51:39 +08:00
没有指定长度,怎么分配空间🐶
shfanzie
2019-05-07 08:51:43 +08:00
用支持 C++14 以上版本编译器就 OK 了。
dttzmm
2019-05-07 09:08:30 +08:00
@ylrshui is not optional 意思是不能是选填,就是说是必填项。此外,上面 auto 那个例子可是能够正常编译的。
missdeer
2019-05-07 09:30:19 +08:00
double* p = new double[3]{1,2,3};
wutiantong
2019-05-07 09:42:21 +08:00
楼上好多张口就来啊,我看可能是 cppreference 的一个勘误
turi
2019-05-07 14:29:03 +08:00
难道不是 1.0 2.0 3.0 ?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/561632

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX