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

C++ 这段代码中的数组初始化样式是什么?这是标准的吗?,c++,C++,我偶然发现了一个源文件(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] <<

我偶然发现了一个源文件(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;
}
#包括
使用名称空间std;
int main(){
long arr[]={[0]=100,[1]=101};//旧方法:long arr[]={100101};

CUT< P>这不是有效的C++代码;C标准采用了它,作为扩展,GCC也允许它在C++中使用。为了使GCC符合C++标准,你需要同时通过<代码> -STD= C++ 17 (或任何版本)和<代码> -PoANDICT<代码>。
请注意,您还可以使用
struct
成员,而不仅仅是数组;给定

struct Point
{
    int x;
    int y;
};

你可以说p={.x=17}到目前为止,C++还不规范,但这只适用于非数组版本,到目前为止,我不知道是否有计划添加数组版本,或者如果它将由C++ 2a发生。< / P>它不符合,它是GCC扩展。用<代码> -PodiaNo.<代码>编译并检查警告。Mulper-Buffer-@ DeiDei刚刚尝试过(<代码> -STD= C++ 14 -学究-墙>代码>……它通过了。FYI,我的GCC是3.3.0。初始化语法是C语言特有的。它目前不支持C++(可能是将来)GCC允许它在C++代码中作为扩展。也许旧的GCC版本不给出警告,但是,是的…指定的初始化器是GCC恰好支持C++的C特性,它不在任何C++标准中。
struct Point
{
    int x;
    int y;
};