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 に答える