c ++数组初始化的特殊方式

时间:2016-06-05 16:12:56

标签: c++

以下代码在C语言中运行顺利,同时在C ++中工作。为什么? 在编译期间,它显示以下错误

prog.cpp: In function 'int main()':
prog.cpp:5:36: sorry, unimplemented: non-trivial designated initializers not supported
  int arr[50] = {0,1,2,[47]=47,48,49};

CODE:

#include <iostream>
using namespace std;

int main() 
{
     int arr[50] = {0,1,2,[47]=47,48,49};
     return 0;
}    

1 个答案:

答案 0 :(得分:1)

在C ++ 11中给出的代码不合法​​,它是ISO C99中指定的指定初始化程序。

GCC支持结构字段命名部分规范(例如union D { int i; double d; }; D d { .d = 1.2; })作为C ++中的扩展,但不支持数组索引部分。

请参阅https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html

  

标准C90要求初始化程序的元素以固定顺序出现,与正在初始化的数组或结构中的元素顺序相同。

     

在ISO C99中,您可以按任何顺序给出元素,指定它们适用的数组索引或结构字段名称,GNU C也允许它作为C90模式的扩展。此扩展未在GNU C ++中实现。