为什么我不能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'
为什么我不能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'
在 C++11 中,您可以通过新的统一初始化来初始化动态分配的聚合:
p = new char[3] {'a', 'a', 'a'};
在 C++98 中,不能为动态分配的聚合指定初始值设定项列表。你所能做的就是首先分配数组,然后用一个值填充它:
p = new char[3];
std::fill(p, p + 3, 'a');
在 C++11 中,你可以说:
char * p = new char[3] { 'a', 'a', 'a' };
在 11 之前,除了零(或默认值)之外,没有其他方法可以初始化动态数组。在这种情况下,您可以使用std::fill
:
#include <algorithm>
std::fill(p, p + 3, 'a');