7

C++ 中是否对数组元素的构造顺序有任何保证?

#include <iostream>
using namespace std;

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

int main()
{
  cout << "[0] is " << new A[3];
}

打印出来

0x602010
0x602011
0x602012
[0] is 0x602010

暗示元素是按 [0]、[1] 和 [2] 的顺序构造的。语言是否保证该顺序?

4

1 回答 1

11

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

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

于 2013-09-26T14:20:13.717 回答