(如果我没有正确使用术语或者我提出一个明显的问题,我道歉。我最近才开始学习C ++)
我已经看到大多数在线示例使用以下方式初始化数组容器:
std::array<int,3> myarray = { 2, 16, 77 };
但我尝试了以下操作:
std::array<int,3> myarray;
myarray[0] = 2;
myarray[1] = 16;
myarray[2] = 77;
似乎也在起作用。是第一种方法优于第二种方法还是第二种方法根本不正确?
答案 0 :(得分:3)
std::array<int,3> myarray = { 2, 16, 77 };
优越:
更清楚
myarray
永远不会处于未定义状态。对于std::array<int,3> myarray;
,元素是默认初始化的,这意味着未初始化,因为int
的默认初始化是保持未初始化。因此,在设置值之前回读元素的行为是未定义的。
可能更快。 (编译器可能会以第一种方式优化第二种方式)。
从C ++ 11开始,我认为第二种方式是错误的。
答案 1 :(得分:1)
两种方法都很好,结果完全一样。但是,第一种方法是首选方法,因为它不仅在代码中更紧凑,而且在运行时也更快,因为容器的元素在构造函数中设置而不是在调用构造函数后设置。请注意,第二种方法仅适用于C ++ 11及更高版本。
答案 2 :(得分:1)
正如你所说,“似乎也在工作”。这通常是两种方法都很好的一个很好的迹象。如果您事先知道所有元素并且它们是常量,则通常使用第一个。如果需要以某种方式计算元素,则经常使用第二种方法。重要的是要注意,在进行赋值之前,不应访问这些值,因为它们将是未定义的。数组容器的大小是常量,但元素不是。您可以随时随意更改它们。