为什么 GCC 6.3 在没有明确的 C++11 支持的情况下编译这个 Braced-Init-List 代码?
Why does GCC 6.3 compile this Braced-Init-List code without explicit C++11 support?
我有一个关于 的问题。
我知道 C++03 不支持 C++11 的 initializer_list
。然而,即使没有 -std=c++11
编译器标志,gcc 6.3 will properly initialize interpolate
也具有以下代码:
map<string, string> interpolate = { { "F", "a && b && c" }, { "H", "p ^ 2 + w" }, { "K", "H > 10 || e < 5" }, { "J", "F && !K" } };
为什么这行得通,我意识到我没有答案。这是一个 Brace-Init-List,但我们从中获得初始化标准容器的方式通常是通过 initializer_list
。那么非 C++11 代码将如何完成初始化?
default compiler command for gcc 6.x is -std=gnu++14
,因此编译器隐式地使用更高版本的 C++ 语言标准编译您的代码。
如果要在 C++03 中编译,则需要手动指定 -std=c++03
。
我有一个关于
我知道 C++03 不支持 C++11 的 initializer_list
。然而,即使没有 -std=c++11
编译器标志,gcc 6.3 will properly initialize interpolate
也具有以下代码:
map<string, string> interpolate = { { "F", "a && b && c" }, { "H", "p ^ 2 + w" }, { "K", "H > 10 || e < 5" }, { "J", "F && !K" } };
initializer_list
。那么非 C++11 代码将如何完成初始化?
default compiler command for gcc 6.x is -std=gnu++14
,因此编译器隐式地使用更高版本的 C++ 语言标准编译您的代码。
如果要在 C++03 中编译,则需要手动指定 -std=c++03
。