为什么 GCC 6.3 在没有显式 C++11 支持的情况下编译此大括号初始化列表代码

Why does GCC 6.3 compile this Braced-Init-List code without explicit C++11 support?

本文关键字:编译 情况下 代码 列表 初始化 支持 GCC C++11 为什么      更新时间:2023-10-16

我有一个关于大括号封闭列表的不同含义的问题。

我知道C++03不支持C++11的initializer_list。然而,即使没有 -std=c++11 编译器标志,gcc 6.3 也会使用以下代码正确初始化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 代码将如何完成初始化呢?

gcc 6.x 的默认编译器命令是 -std=gnu++14 ,因此编译器使用更高版本的 C++ 语言标准隐式编译您的代码。

如果要在 C++03 中编译,则需要手动指定-std=c++03

相关文章: