为什么 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