使用new时的数组初始化

本文关键字:数组 初始化 new 使用 | 更新日期: 2023-09-27 17:58:45

在C#中,我可以做到这一点:

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

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

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

但它不会编译。

使用new时的数组初始化

这是C++规范中的一个错误(它不允许编译这个简单的构造)。您需要提供尺寸

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

请参阅http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1469。请注意,如果将类型名称用括号括起来,则它是类型id,而不是新类型id,因此在语法上允许您省略size表达式。因此,您可能能够找到一个允许您说的实现

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

尽管很明显,这并不是可能的明确意图(new段落中的一些规则可以被解释为禁止)。

为什么不直接这样做?:

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

还要避免完全使用数组。使用std::vector

您可能不想在C++中使用数组。请改用std::vector

你甚至可以将其初始化为3'a。

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

如果您的编译器支持C++11,您甚至可以使用初始化程序列表。

std::vector<char> vectorOfChars{'a', 'a', 'a'};

我想你想要的是:

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

是的,你可以这样做;

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

请从MSDN中查看Arrays (C++)

字符串a="aaa";a[0]、a[1]。。等如果你想制作二维字符串数组,这会容易得多。。etc