使用new分配的数组是否可以使用初始化程序?

har*_*ris 11 c++ dynamic-arrays

在我正在阅读的书中(Herbert Schildt的C++ Complete Reference),它表示没有使用分配的数组new可以有一个初始化器.

我不能使用new?初始化动态分配的数组?如果不是什么原因呢?

CB *_*ley 18

这不是真的(你几乎肯定()会给自己一个替代参考),你可以使用一个空的初始化器()来初始化数组但是,在使用数组new时你不能单独初始化数组元素.(见ISO/IEC 14882:2003 5.3.4 [expr.new]/15)

例如

int* p = new int[5](); // array initialized to all zero
int* q = new int[5];   // array elements all have indeterminate value
Run Code Online (Sandbox Code Playgroud)

没有根本原因不允许更复杂的初始化器只是因为C++ 03没有它的语法结构.在下一个C++版本中,您将能够执行此类操作.

int* p = new int[5] {0, 1, 2, 3, 4};
Run Code Online (Sandbox Code Playgroud)

  • @MikeDeSimone:实际上,它更简单,你应该能够:`new std :: complex <float> [4] = {{1,0},{0,1},{-1,0},{0 .-1}};`. (2认同)