我知道默认情况下不应启用编程语言的实验性功能,因此我欢迎使用标记-std=c++0x
和-std=c++1y
。但是,C ++ 11现在已经成为标准。为什么编译器仍然需要-std=c++11
来启用对其功能的支持?
答案 0 :(得分:29)
C ++ 11已经标准化了几年,但是编译器不会将其默认模式切换到C ++ 11,直到:
基本上,很多人(和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]。