在C ++中初始化数组容器的方法

时间:2016-02-02 13:32:58

标签: c++ arrays c++11

(如果我没有正确使用术语或者我提出一个明显的问题,我道歉。我最近才开始学习C ++)

我已经看到大多数在线示例使用以下方式初始化数组容器:

std::array<int,3> myarray = { 2, 16, 77 };

但我尝试了以下操作:

std::array<int,3> myarray;

myarray[0] = 2;
myarray[1] = 16;
myarray[2] = 77;

似乎也在起作用。是第一种方法优于第二种方法还是第二种方法根本不正确?

3 个答案:

答案 0 :(得分:3)

std::array<int,3> myarray = { 2, 16, 77 };优越:

  1. 更清楚

  2. myarray永远不会处于未定义状态。对于std::array<int,3> myarray;,元素是默认初始化的,这意味着未初始化,因为int的默认初始化是保持未初始化。因此,在设置值之前回读元素的行为是未定义的。

  3. 可能更快。 (编译器可能会以第一种方式优化第二种方式)。

  4. 从C ++ 11开始,我认为第二种方式是错误的。

答案 1 :(得分:1)

两种方法都很好,结果完全一样。但是,第一种方法是首选方法,因为它不仅在代码中更紧凑,而且在运行时也更快,因为容器的元素在构造函数中设置而不是在调用构造函数后设置。请注意,第二种方法仅适用于C ++ 11及更高版本。

答案 2 :(得分:1)

正如你所说,“似乎也在工作”。这通常是两种方法都很好的一个很好的迹象。如果您事先知道所有元素并且它们是常量,则通常使用第一个。如果需要以某种方式计算元素,则经常使用第二种方法。重要的是要注意,在进行赋值之前,不应访问这些值,因为它们将是未定义的。数组容器的大小是常量,但元素不是。您可以随时随意更改它们。