Con*_*nos 2 c++ arrays designated-initializer
我认为指定的初始化程序在C++中已经停止,并且仅在C中工作.但是,我遇到了一个简单的例子,它使用clang ++进行编译和工作.
int main()
{
int a[6] = { [4] = 29, [2] = 15 };
}
Run Code Online (Sandbox Code Playgroud)
g ++:https://rextester.com/AXIZ79197(错误)
clang ++:https://rextester.com/UYVHHP56966(作品)
vc ++:https://rextester.com/UCBEU10658(错误)
g ++和vc ++都无法编译,而clang ++工作正常.值得一提的是,g ++和vc ++给出了不同的错误消息.vc ++将指定的初始值设定项与lambda表达式混淆.我想我可以将此归结为g ++是一个较旧的编译器,但我不确定.
问题:
编译时-pedantic会生成以下警告:
source_file.cpp:3:18: warning: designated initializers are a C99 feature [-Wc99-extensions]
int a[6] = { [4] = 29, [2] = 15 };
^~~~~~~~
source_file.cpp:3:28: warning: designated initializers are a C99 feature [-Wc99-extensions]
int a[6] = { [4] = 29, [2] = 15 };
Run Code Online (Sandbox Code Playgroud)
很明显,clang++默认情况下启用c99-extensions.
这不是错误,因为编译器可能会选择提供其他功能.clang++开发人员只是决定保持启用它.-pedantic如果我们不想要这些功能,最好使用它.
有趣的是,在搜索相关信息时,我在Clang页面中找到了C++支持,其中"指定初始化程序"被列为部分支持,通过扩展即将发布的提案:
对C++ 17之后的C++标准的一些提议特征的实验支持,临时命名为C++ 2a
这是即将推出的标准的确切提案.因此在将来的C++中可能会有指定的初始值设定项.