使用new时的数组初始化

5
在C#中,我可以这样做:
char[] a = new char[] {'a', 'a', 'a'};

但是我能在C++中做类似的事情吗? 我尝试了:

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

但它无法编译。


1
尝试使用char a[] = {'a', 'a', 'a'};。简单多了! - Bo Persson
1
指定大小:char *a = new char [3] {'a', 'a', 'a'}; - jrok
6个回答

6
为什么不直接这样做呢?:
char a[] = {'a', 'a', 'a'};

同时完全避免使用数组。使用std::vector

std::vector的初始化器中添加一些东西是很好的,比如“如果你很幸运拥有支持c++11的编译器,那么你可以这样做。” - Anton Kovalenko
@AntonKovalenko 我对C++11不是很了解,我的重点已经转向C#。但如果你想在答案中添加一些内容,我也不介意 :-) - Aniket Inge

6

这是C++规范中的一个缺陷(它不允许这种简单的结构编译)。你需要提供大小。

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

请参见http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1469。请注意,如果您将类型名称括在括号中,则它是一个type-id而不是new-type-id,因此在语法上允许您省略大小表达式。因此,您可能会找到一种实现方式,使您能够这样说。
char *a = new (char[]){'a', 'a', 'a'};

虽然明确的意图并不是这样,但有些规则在解释上可能禁止这种情况发生(new段落中的一些规则可以被解释为禁止它)。


1
我认为这里根本不应该使用new关键字。可以使用堆栈或容器代替。 - Inverse
@inverse 你应该将这个作为评论添加到问题中。我的回答中没有推荐任何东西,我只是修复了他的语法。 - Johannes Schaub - litb
所有关于堆栈数组或向量的回复都没有真正回答他关于new语法的问题。 - Johannes Schaub - litb

4

在C++中,您可能不想使用数组,而应该使用std::vector

您甚至可以将其初始化为3个“a”。

std::vector<char> vectorOfChars(3, 'a');

如果你的编译器支持C++11,你甚至可以使用初始化列表。
std::vector<char> vectorOfChars{'a', 'a', 'a'};

3
我认为你想要的是这个:

我认为您需要的是这个:

   const char a[] = {'a', 'a', 'a'};

1
是的,您可以这样做;
char a[] = {'a', 'a', 'a'};

查看来自MSDN数组(C ++)


0

string a = "aaa"; a[0] , a[1] ..etc 如果你想要创建二维字符串数组等,这将会更加容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接