【问题标题】:Array initialization when using new使用 new 时的数组初始化
【发布时间】:2013-02-10 17:11:14
【问题描述】:

在 C# 中我可以这样做:

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

但是我可以在 C++ 中做类似的事情吗?我试过了:

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

但它不能编译。

【问题讨论】:

  • 试试char a[] = {'a', 'a', 'a'};。容易多了!
  • 指定大小:char *a = new char [3] {'a', 'a', 'a'};

标签: c# c++ arrays initialization


【解决方案1】:

这是 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 段落中的一些规则可以解释为禁止它)。

【讨论】:

  • 我认为这里根本不应该使用new。使用堆栈或容器。
  • @inverse 您应该将其作为评论添加到问题中。我的回答中不推荐任何内容。我刚刚修正了他的语法。
  • 所有关于堆栈数组或向量的回复并没有真正回答他关于 new 语法的问题。
【解决方案2】:

为什么不这样做呢? :

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

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

【讨论】:

  • std::vector 的初始化器上添加一些东西会很棒,比如“如果你有幸拥有支持 c++11 的编译器,那么你就可以。”跨度>
  • @AntonKovalenko 我不是最新的 C++11,我的重点已经转移到 C#。但是我不介意您是否想在答案中添加一些内容:-)
【解决方案3】:

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

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

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

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

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

【讨论】:

    【解决方案4】:

    我想你想要的是这样的:

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

    【讨论】:

      【解决方案5】:

      是的,你可以这样做;

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

      查看 MSDN 中的 Arrays (C++)

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 2012-03-25
          • 2011-01-28
          • 2016-03-03
          • 2014-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-11
          相关资源
          最近更新 更多