7

在网上搜索了一下后,我得出结论,指定的初始化程序不是任何 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++ 不应该支持这种类型的代码。

4

2 回答 2

0

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

于 2013-11-05T10:38:57.120 回答
-1

您似乎发现了 gcc 编译器的一个特性:一个未记录的扩展,无法通过使用任何选项(例如-pedantic -std=XXXX)来抑制或警告。

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

于 2013-11-05T12:14:00.333 回答