c++ - 为什么 C++11 编译器支持仍然需要一个标志?

标签 c++ c++11 compiler-construction

我了解默认情况下不应启用编程语言的实验性功能,因此我欢迎使用标志 -std=c++0x-std=c++1y。然而,几年前 C++11 已经成为标准。为什么编译器仍然需要 -std=c++11 来启用对其功能的支持?

最佳答案

C++11 已经成为标准几年了,但编译器不会将其默认模式切换到 C++11,直到:

  • 至少,该编译器及其使用的库都支持 C++11。如果编译器编写者对可靠性有任何顾虑,那么它也是稳定的。
  • 最好在编译器中增加主要版本号,因为 C++11 不完全向后兼容 C++03。
  • 理想情况下,按照众所周知的时间表进行,以便用户为变化做好准备。

基本上,很多人(和 makefile)依赖于编译器是一个符合 C++03 的编译器,或者至少依赖于它的不符合性是已知的。由于 C++11 引入了不符合 C++03 的新实例,因此这种变化可能会带来创伤。

可以说,任何依赖 C++03 的人都应该指定一个选项来说明这一点,并且更改为默认模式对他们没有任何影响。但是,一旦您记录了编译器的默认设置,人们就会有意或无意地依赖它。

特别是对于 gcc,4.8.2 手册页说“对 C++11 的支持仍处于试验阶段”。所以我认为最终你的问题的答案可能是正确实现 C++11 需要 2 年多的时间,即使是从标准草案完成的所有工作开始。

关于c++ - 为什么 C++11 编译器支持仍然需要一个标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20373626/

相关文章:

c++ - 使用 openGL 绘制 OBJ 文件

c++ - std::bind 的返回类型可隐式转换为两个不同的显式构造函数

c++ - C 编译器如何处理使用未初始化的变量?

c++ - 二进制文件如何在C编程中可移植?

c++ - gdb 调试异常

c++ - 如何修复 pop_front 和 pop_back 函数?

ruby - Ruby block 是如何实现的(在编译器中)

java - 在 Java 中编译时如何包含现有代码/类文件

c++ - 将传感器数据发布给制图师

c++ - 将模板参数作为目标类型传递