c++ - 是否允许递归初始化数组?
问题描述
我有以下代码片段:
int i[] = {42, i[0]};
是否允许这样的初始化或导致未定义的行为?
三个主要编译器(gcc、clang、msvc)为我42
提供了i[1]
. 因此看起来是合法的,但我想从这个案例的标准中看到一个引用。
解决方案
是的,它定义明确。
int i[] = {42, i[0]};
这是一个聚合1初始化2。聚合初始化遵循以下规则:
[dcl.init.aggr]/6
聚合元素的初始化按元素顺序进行评估。也就是说,与给定元素相关的所有值计算和副作用都按顺序排列在其后面的任何元素之前。
推荐阅读
- bluetooth - 如何在 bluez5.inc 中添加兼容性 -C
- kubernetes - HPA 缩减未正确发生
- ruby - 如何在 Rails 应用程序中将 Ruby 2.3.1 升级到 2.6.5,并使用工具或 gem 验证兼容性和弃用检查
- python - Tensorflow 2.0 数据集 tensorflow.python.framework.errors_impl.InternalError:无法解析张量原型
- reactjs - react-redux 中的 API 调用,thunk 不起作用
- sql-server - 根据条件更新单列
- c - /usr/bin/ld: 找不到 -lmosquitto
- java - Mongo $sort 是如何工作的?
- python - 如何在 matplotlib 的不同子图中为 sns distplot 设置不同的样式?
- arrays - 如何合并两个json并将它们保存为数组