这段代码中的数组初始化样式是什么?它是标准的吗?

时间:2018-05-03 04:11:16

标签: c++

我遇到了一个源文件here(在C中)。它使用合理但奇怪的样式来初始化数组。我在一个较短的C ++程序中试了一下(请注意代码注释中的“旧方法”):

arr.cc

#include <iostream>
using namespace std;

int main() {
    long arr[] = { [0] = 100, [1] = 101 }; // old way: long arr[] = { 100, 101 };
    cout << arr[0] << " " << arr[1] << endl;
}

代码编译如下:

  

g ++ - 6 -std = c ++ 14 arr.cc -o arr

运行时,输出为:

100 101

它通过了-std=c++14?但是我在C ++参考网站上找不到它,比如cppreference.com。它符合标准吗?如果是这样,那么哪个版本?

1 个答案:

答案 0 :(得分:3)

这不是有效的C ++代码; C标准采用了它,作为扩展,GCC也允许它在C ++中使用。要使GCC符合C ++标准,您需要传递-std=c++17(或任何版本) -pedantic。有了这个,your code does emit warnings saying it's nonstandard。在GCC中如何工作的描述是here

请注意,您也可以使用struct成员执行此操作,而不仅仅是数组;给定

struct Point
{
    int x;
    int y;
};
你可以说Point p = {.x = 17}。到目前为止,这在C ++中也是非标准的,但是it will be adopted in C++2a。这仅适用于目前为止的非阵列版本;我不知道是否有计划添加阵列版本,或者它是否会由C ++ 2a发生。