1

为什么我不能new像这样使用运算符:

char* p;

p = new char('a')[3];

delete[] p;

编译器说:

error C2143: syntax error : missing ';' before '['
error C3409: empty attribute block is not allowed
error C2143: syntax error : missing ']' before 'constant'
4

2 回答 2

6

在 C++11 中,您可以通过新的统一初始化来初始化动态分配的聚合:

p = new char[3] {'a', 'a', 'a'};

在 C++98 中,不能为动态分配的聚合指定初始值设定项列表。你所能做的就是首先分配数组,然后用一个值填充它:

p = new char[3];
std::fill(p, p + 3, 'a');
于 2012-07-21T19:43:41.467 回答
5

在 C++11 中,你可以说:

char * p = new char[3] { 'a', 'a', 'a' };

在 11 之前,除了零(或默认值)之外,没有其他方法可以初始化动态数组。在这种情况下,您可以使用std::fill

#include <algorithm>

std::fill(p, p + 3, 'a');
于 2012-07-21T19:43:12.607 回答