You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:40:02