[英]Why can we initialize an array only with an initializer-list
In the following example 在以下示例中
#include <iostream>
int a[][2] = {{1, 4}, {2, 6}};
int b[][3] = a; // error: array initializer must be an initializer list
Why can't we initialize an array in any way instead of with an initializer-list
? 为什么我们不能以任何方式初始化数组而不是initializer-list
? I tried to find it in the N4296::8.5.4 [dcl.init.list]
but it seems there is no anything suitable about it. 我试图在N4296::8.5.4 [dcl.init.list]
找到它,但似乎没有任何合适的东西。
This question is sort of backwards, as is the error message. 这个问题有点倒退,错误信息也是如此。 It has always been the case that you cannot initialise an array from the name of another array. 一直以来,您无法从另一个数组的名称初始化数组。 Initializer lists aren't relevant to that. 初始化列表与此无关。
[C++11: 8.5/16]:
The semantics of initializers are as follows.[C++11: 8.5/16]:
初始化器的语义如下。 The destination type is the type of the object or reference being initialized and the source type is the type of the initializer expression. 目标类型是要初始化的对象或引用的类型, 源类型是初始化表达式的类型。 If the initializer is not a single (possibly parenthesized) expression, the source type is not defined. 如果初始化程序不是单个(可能带括号的)表达式,则不定义源类型。
- If the initializer is a (non-parenthesized) braced-init-list , the object or reference is list-initialized (8.5.4). 如果初始化程序是(非括号的) braced-init-list ,则对象或引用是列表初始化的(8.5.4)。
- If the destination type is a reference type, see 8.5.3. 如果目标类型是引用类型,请参见8.5.3。
- If the destination type is an array of characters, an array of
char16_t
, an array ofchar32_t
, or an array ofwchar_t
, and the initializer is a string literal, see 8.5.2. 如果目标类型是字符数组,char16_t
数组,char32_t
数组或wchar_t
数组,初始值设定项是字符串文字,请参见8.5.2。- If the initializer is
()
, the object is value-initialized. 如果初始化程序为()
,则对象进行值初始化。- Otherwise, if the destination type is an array, the program is ill-formed. 否则,如果目标类型是数组,则程序格式错误。
- [..] [..]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.