我有一个关于大括号封闭列表的不同含义的问题。
我知道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
。