C++数组元素的构造顺序

Ben*_*aro 6 c++ arrays constructor

C++中是否有关于数组元素构造顺序的保证?

#include <iostream>
using namespace std;

struct A {
  A() { cout << this << endl; }
};

int main()
{
  cout << "[0] is " << new A[3];
}
Run Code Online (Sandbox Code Playgroud)

打印出来

0x602010
0x602011
0x602012
[0] is 0x602010
Run Code Online (Sandbox Code Playgroud)

意味着元素是按照[0],[1]和[2]的顺序构建的.该语言是否保证该顺序?

Mik*_*our 11

是的,这是由C++ 11 12.6/3([class.init]/3)保证的:

当一个类对象数组被初始化(显式或隐式)并且元素由构造函数初始化时,应该按照下标顺序为数组的每个元素调用构造函数.