在网上搜索了一下后,我得出的结论是,指定的初始值设定项不是任何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 ++不应该支持这种类型的代码。
答案 0 :(得分:0)
每个编译器通常都有自己的语言扩展。它对于g ++和例如MS VC ++是有效的。例如,在MS VC ++中,您可以为每个使用语句。
答案 1 :(得分:-1)
您似乎找到了gcc编译器的功能:一个未记录的扩展,无法通过使用任何选项(例如-pedantic -std=XXXX
)进行抑制或警告。
如果您想合理地确定您的代码符合标准,我建议您始终使用各种编译器,并确保您的代码在没有警告的情况下通过所有代码(并使用最严格的警告选项)。 gcc和clang是免费的,所以你总是可以使用至少两个编译器(并且clang非常擅长标准兼容)。