【发布时间】:2018-05-03 04:11:16
【问题描述】:
我遇到了一个源文件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?但我在 cppreference.com 等 C++ 参考网站上找不到它。是否符合标准?如果有,是从哪个版本开始的?
【问题讨论】:
-
不符合,是 GCC 扩展。
-
使用
-pedantic编译并检查警告。 godbolt.org/g/rG3LXC 正如我所说,它是编译器供应商的扩展。 -
@DeiDei 刚试过 (
-std=c++14 -pedantic -Wall).. 它通过了。仅供参考,我的 GCC 是 6.3.0。 -
这种初始化语法是特定于 C 语言的。 C++ 目前不支持它(将来可能会支持)。 GCC 允许它在 C++ 代码中作为扩展。
-
也许较旧的 GCC 版本不会发出警告,但是是的……指定的初始化程序是 GCC 恰好在 C++ 中支持的 C 特性。它不在任何 C++ 标准中。
标签: c++