【发布时间】:2021-06-21 03:21:27
【问题描述】:
我正在尝试使用初始化列表初始化动态声明的数组,但我注意到我必须使用 GCC 提供数组大小,否则会出错。如果忽略数组大小,使用 MSVC 尝试相同的操作不会导致任何错误。使用带有动态数组的初始化列表时是否必须提供数组大小?这是实现定义的东西,这就是为什么两个编译器都不同的原因吗?
int *array { new int [3] {0, 1, 2} }; // Works with both MSVC and GCC.
int *array { new int [] {0, 1, 2} }; // Works only with MSVC, not GCC.
【问题讨论】:
-
Clang 也支持两个版本Demo。
-
(
initializer-list标签指的是std::initializer_list) -
不是 100%,我无法列出所有细节,但我认为 g++ 在这里是错误的,应该接受第二个版本。 This reference 还提供了
double* p = new double[]{1,2,3};作为工作示例。
标签: c++ gcc visual-c++ language-lawyer dynamic-arrays