为什么指定的初始化程序在C ++中工作?

时间:2013-11-05 10:31:29

标签: c++

在网上搜索了一下后,我得出的结论是,指定的初始值设定项不是任何C ++标准的一部分,但是在使用g ++(4.7.0)编译此代码时

#include <iostream>
using namespace std;

int main(int argc, char** argv)
{
    int test[2][2] ={
        [0]={1,2},
        [1]={3,4},
    };

    for (int x = 0; x<2;x++)
    {
        for (int y = 0; y<2; y++)
        {
            cout << test[x][y] << endl;
        }
    }

    return 0;
}

它将编译并运行正常。

我错过了什么吗?从我读过的所有内容来看,C ++不应该支持这种类型的代码。

2 个答案:

答案 0 :(得分:0)

每个编译器通常都有自己的语言扩展。它对于g ++和例如MS VC ++是有效的。例如,在MS VC ++中,您可以为每个使用语句。

答案 1 :(得分:-1)

您似乎找到了gcc编译器的功能:一个未记录的扩展,无法通过使用任何选项(例如-pedantic -std=XXXX)进行抑制或警告。

如果您想合理地确定您的代码符合标准,我建议您始终使用各种编译器,并确保您的代码在没有警告的情况下通过所有代码(并使用最严格的警告选项)。 gcc和clang是免费的,所以你总是可以使用至少两个编译器(并且clang非常擅长标准兼容)。