C++标准是否规定数组元素默认初始化的顺序?
C++数组默认初始化的元素顺序规定
结论
C++标准明确规定了数组元素默认初始化的顺序是按下标从0到N-1的递增顺序,因此你提供的代码一定会输出严格递增的内存地址。
标准依据
你在9.4.1初始化总则中找到的内容仅说明了数组的每个元素会被默认初始化,但未提及顺序,不过标准的其他章节有明确补充:
在C++标准的**[expr.new]**章节中,关于数组对象的初始化有如下规定:
如果new表达式创建对象数组,对象将按地址递增的顺序(即按下标递增的顺序)进行初始化。
对应到你的代码,new Foo[10]创建的10个Foo对象在内存中是连续存放的,下标0的对象地址最小,后续每个元素的地址依次递增。初始化时会按0到9的顺序调用每个Foo的构造函数,因此每个构造函数中输出的this指针(即当前对象的地址)必然是严格递增的。
补充说明
你无需担心初始化顺序的不确定性,标准已经明确了该行为的可观察副作用(即构造函数的调用顺序和对应的地址输出)是完全确定的。
内容的提问来源于stack exchange,提问作者ChrisB
相关产品推荐
相关产品推荐

