为什么 g++ 4.6.2 仍然需要"-std=c++0x"?
Why is "-std=c++0x" still needed for g++ 4.6.2?
我下载并构建了gcc 4.6.2。我发现对于c++ 11的特性,命令行选项-std=c++0x
仍然是需要的。为什么呢?不是应该默认支持它吗?
$ g++ --version
g++ (GCC) 4.6.2
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
因为
- c++ 11只有4个月的历史,对它的支持还远远没有完成或经过测试
- 在没有大的公告和准备阶段的情况下改变默认值对人们来说是不好的
- 目前还不清楚默认值是否会改变(参见-std=C99)。
阅读GCC网站:
GCC 4.6中实验性c++ 0x支持状态
因此你不能让默认值成为实验性的东西。此外,它是在c++ 11标准发布之前,并且实际名称没有定义,这解释了为什么c++ 0x而不是c++ 11。
如果你对GCC 4.7感兴趣,它仍然是实验性的:
GCC 4.7中实验性c++ 11支持状态
它仍然是需要的,并且在可预见的将来可能会保持这种方式,因为c++ 11与c++ 03不兼容。将c++默认编译为c++ 11将会破坏大量现有的代码。
我认为它被称为0x
的事实给了你一个提示。它甚至不完整(参见http://gcc.gnu.org/projects/cxx0x.html)
相关文章:
- -std=c++0x 导致在 boost 1.64 的情况下返回对临时的引用
- Unix 宏在使用 -std=c++0x 标志编译时变得未定义
- G-WAN cc1plus:错误:无法识别的命令行选项"-std=gnu++0x"
- g++-std=c++0x及其兼容性
- g++ 不会在 Snow Leopard 下编译 std=c++0x
- "stoi"没有在此范围内声明,即使添加 -std=c++0x 和自定义函数,仍然适用
- C++11 统一初始化不适用于"g++ -std=c++0x"
- ISO C++禁止声明 .没有设置 --std=c++0x 的类型
- 将 -std=c++0x 与 gfortran 一起使用
- 如何在 eclipse makefile 项目中的编译器选项中设置 -std=c++0x
- gem install nmatrix - 你需要一个支持 -std=c++0x 或 -std=c++11 的 g++
- 尝试通过CGAL_CXX_FLAGS设置 --std=c++0x 或 -std=gnu++0x 会忽略值
- 适用于 MacOS 的"-std=gnu++0x"选项
- 在 G++ 编译命令中包含 -std=c++0x 有什么意义?
- 启用-std=c++0x或-std=gnu++0x编译器选项
- c++-std=c++0x导致分段错误(提升日志记录)
- G++ 4.6 -std=gnu++0x:静态局部变量构造函数调用计时和线程安全
- 警告:扩展初始值设定项列表仅适用于-std=c++0x或-std=gnu++0x
- g++ 4.4.7 -std=gnu++0x 应该编译"for each"结构吗?
- cc1plus:错误:无法识别的命令行选项"-std=c++0x"