在以下示例中
#include <iostream>
int a[][2] = {{1, 4}, {2, 6}};
int b[][3] = a; // error: array initializer must be an initializer list
为什么我们不能以任何方式初始化数组而不是initializer-list
?我试图在N4296::8.5.4 [dcl.init.list]
中找到它,但似乎没有任何合适的东西。
答案 0 :(得分:3)
这个问题有点倒退,错误信息也是如此。 始终的情况是,您无法从另一个数组的名称初始化数组。初始化列表与此无关。
[C++11: 8.5/16]:
初始值设定项的语义如下。 目标类型是要初始化的对象或引用的类型,源类型是初始化表达式的类型。如果初始化程序不是单个(可能带括号的)表达式,则不定义源类型。
- 如果初始化程序是(非括号内的) braced-init-list ,则对象或引用是列表初始化的(8.5.4)。
- 如果目标类型是引用类型,请参阅8.5.3。
- 如果目标类型是一个字符数组,一个
char16_t
数组,一个char32_t
数组或一个wchar_t
数组,并且初始化程序是一个字符串文字,请参阅8.5.2。- 如果初始值设定项为
()
,则对象将进行值初始化。- 否则,如果目标类型是数组,则程序格式错误。
- [..]