我曾以为C++已经取消了指定初始化器,而这只适用于C语言。然而,我发现一个简单的例子可以使用clang++编译并成功运行。
int main()
{
int a[6] = { [4] = 29, [2] = 15 };
}
g++: https://rextester.com/AXIZ79197 (错误)
clang++: https://rextester.com/UYVHHP56966 (正常工作)
vc++: https://rextester.com/UCBEU10658 (错误)
g++和vc++都无法编译,而clang++却可以正常工作。值得一提的是,g++和vc++给出了不同的错误信息。vc++将指定的初始化器与lambda表达式混淆了。我猜这可能是因为g++是一个较旧的编译器,但我不确定。
问题:
- 为什么clang决定允许指定的初始化器,而g++和vc++没有?
- 这只是一个编译器bug还是有其他原因?
-Wc99-extensions
让clang警告你,或者使用-pedantic
。 - t.niese