为什么 GCC 6.3 在没有显式 C++11 支持的情况下编译此大括号初始化列表代码
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 也会使用以下代码正确初始化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
。
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 在已经使用Git的情况下减少编译时间
- 模板方法访问正向声明的类仅在没有此指针的情况下无法编译
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 如何在不需要LIBCD.lib的情况下在Visual Studio 6中编译C项目
- 我可以在不使用Qt for Webassembly的情况下使用Emscripten编译Qt吗?
- C++项目编译强制使用 /clr 选项,尽管在没有公共语言运行时支持的情况下执行它
- 我可以在不创建项目的情况下在Visual Studio 2019中编译和运行HelloWorld.cpp吗?
- C++11 - 获取编译时的所有类变量,并在没有 Boost 的情况下为它们调用方法
- 在我的 CLR 项目中添加包含会导致无法在启用 /clr 的情况下编译 WLR
- 如何在没有Cygwin或Visual Studio的情况下编译Magick++?
- 在哪种情况下,C++会在编译时进行数组边界检查?
- 如何在不制作Visual Studio 2017项目的情况下编译C++文件?
- 如何减少编译时间:在包含未触及的头文件的情况下
- 为什么 GCC 6.3 在没有显式 C++11 支持的情况下编译此大括号初始化列表代码
- 如何在不退出和失去断点的情况下重新加载重新编译的二进制文件
- 在没有 -g 选项的情况下编译,但我想获得更详细的调试信息
- 在没有 AVX 的情况下编译提升
- 如何在Ubuntu中不加编译器硬化的情况下编译宝石
- 即使我传递了无效的类型参数,我为什么还能在没有错误的情况下编译此代码