为什么我们只能使用初始化列表初始化数组

时间:2015-01-03 06:58:21

标签: c++ arrays

在以下示例中

#include <iostream>

int a[][2] = {{1, 4}, {2, 6}};
int b[][3] = a; // error: array initializer must be an initializer list

DEMO

为什么我们不能以任何方式初始化数组而不是initializer-list?我试图在N4296::8.5.4 [dcl.init.list]中找到它,但似乎没有任何合适的东西。

1 个答案:

答案 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。
  •   
  • 如果初始值设定项为(),则对象将进行值初始化。
  •   
  • 否则,如果目标类型是数组,则程序格式错误。
  •   
  • [..]
  •