如果我理解正確,文章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)
uj5u.com熱心網友回復:
為什么在 c 11 中編譯指示符初始化?
該程式在 C 11 中格式錯誤。C 語言不允許編譯格式錯誤的程式。
我的第一個猜測是有某種 gcc 擴展支持它,但是 clang 也編譯了這段代碼
你的第一個猜測是好的,你可以簡單地擴展它來得到答案:GCC 和 Clang 都擴展了該語言。Clang 經常嘗試盡可能地與 GCC 兼容。無論好壞。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/483495.html
