为什么我们只能用初始化列表初始化一个数组
Why can we initialize an array only with an initializer-list
在下面的例子中
#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]
中找到它,但似乎没有任何适合它的东西。
这个问题有点倒退,错误信息也是如此。 总是 无法从另一个数组的名称初始化一个数组。初始化列表与此无关。
[C++11: 8.5/16]:
The semantics of initializers are as follows. 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).
- If the destination type is a reference type, see 8.5.3.
- If the destination type is an array of characters, an array of
char16_t
, an array of char32_t
, or an array of wchar_t
, and the initializer is a string literal, see 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.
- [..]
在下面的例子中
#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]
中找到它,但似乎没有任何适合它的东西。
这个问题有点倒退,错误信息也是如此。 总是 无法从另一个数组的名称初始化一个数组。初始化列表与此无关。
[C++11: 8.5/16]:
The semantics of initializers are as follows. 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).
- If the destination type is a reference type, see 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.- If the initializer is
()
, the object is value-initialized.- Otherwise, if the destination type is an array, the program is ill-formed.
- [..]