如果我理解正确,文章https://en.cppreference.com/w/cpp/language/aggregate_initialization说从 c++20 开始允许指定初始化,在 c++11 中不允许。
那么为什么下面的代码是用 c++11 编译的呢?g++ -std=c++11 main.cpp
struct A { int x; int y; int z; };
int main(int argc, char const *argv[])
{
A b{.x = 1, .z = 2};
return 0;
}
我的第一个猜测是有某种 gcc 扩展支持它,但是 clang 也编译了这段代码(clang -std=c++11 main.cpp
)
为什么在 c++11 中编译指示符初始化?
该程序在 C++11 中格式错误。C++ 语言不允许编译格式错误的程序。
我的第一个猜测是有某种 gcc 扩展支持它,但是 clang 也编译了这段代码
你的第一个猜测是好的,你可以简单地扩展它来得到答案:GCC 和 Clang 都扩展了该语言。Clang 经常尝试尽可能地与 GCC 兼容。无论好坏。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句