我认为指定的初始化程序在 C++ 中已停止使用,并且仅在 C 中有效。但是,我遇到了一个简单的示例,该示例使用 clang++ 编译并正常工作。
int main()
{
int a[6] = { [4] = 29, [2] = 15 };
}
g++:https ://rextester.com/AXIZ79197 (错误)
铿锵++:https ://rextester.com/UYVHHP56966 (作品)
vc++:https ://rextester.com/UCBEU10658 (错误)
g++ 和 vc++ 都无法编译,而 clang++ 工作得很好。还值得一提的是,g++ 和 vc++ 给出了不同的错误信息。vc++ 将指定的初始化程序与 lambda 表达式混淆了。我想我可以将此归咎于 g++ 是一个较旧的编译器这一事实,但我不确定。
问题:
- 为什么当 g++ 和 vc++ 不允许时,clang 决定允许指定的初始化程序?
- 这只是一个编译器错误还是有其他原因?