我遇到了一个源文件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。它符合标准吗?如果是这样,那么哪个版本?
答案 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发生。