是否直接初始化禁止数组?

时间:2014-06-30 22:58:46

标签: c++ arrays initialization language-lawyer

语言 - 律师明智,标准中的哪个条款禁止以下代码:

int arr[] (10, 42); 

这将产生一个包含10个元素的数组,每个元素都被初始化为42个。

2 个答案:

答案 0 :(得分:5)

语言律师明智,8.5 / 17:

  

- 如果初始化程序是(非括号的)braced-init-list,则对象或引用是列表初始化的(8.5.4)。

     

- 如果目的地类型是参考类型,请参见8.5.3。

     

- 如果目标类型是字符数组,则为char16_t数组,char32_t数组或   wchar_t数组,初始值设定项是字符串文字,见8.5.2。

     

- 如果初始值设定项为(),则对象进行值初始化。

     

- 否则,如果目标类型是数组,则程序格式错误

braced-init-list是{},括号内可以包含任何内容(例如,int arr[3] = {1,2,3})。考虑到这一点,int arr[] (10, 42);的前4个选项都不可行,最后一个选项表明该程序格式不正确。

答案 1 :(得分:0)

8.5 / 14:

  

如果正在初始化的实体没有类类型,带括号的初始值设定项中的表达式列表应为单个表达式。