为什么C ++ 11编译器支持仍需要标志?

时间:2013-12-04 11:04:13

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

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

2 个答案:

答案 0 :(得分:29)

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需要两年多的时间,甚至从草案标准的所有工作开始。

答案 1 :(得分:4)

小更新。 GCC 6.1及更高版本默认使用C ++ 14模式[source]