什么时候Gnu C++会在没有明确要求的情况下支持C++ 11?

tow*_*owi 46 c++ gcc c++11 gcc4.8

目前,使用g ++ - 4.8.1,您必须通过C++ 11模式编译文件

g++ -std=c++11 -o prog.x prog.cpp
Run Code Online (Sandbox Code Playgroud)

我可以说,是否有计划?

g++ -o prog.x prog.cpp
Run Code Online (Sandbox Code Playgroud)

编译prog.cpp

也许prog.cpp

  • #include <regex>
  • thread_local
  • class Widget { int member = 5; }
  • MyType operator"" myt(const char*, sze_t);
  • 等等.

nob*_*bar 29

GCC 6.0:https://gcc.gnu.org/gcc-6/changes.html

现在,C++的默认模式-std=gnu++14不是-std=gnu++98.


小智 20

我能得到的答案最接近的是info gcc命令:

修订后的ISO C++标准于2011年作为ISO/IEC 14882:2011发布,被称为C++ 11; 在它发布之前,它通常被称为C++ 0x.C++ 11包含对C++语言的一些更改,其中大部分已在GCC中以实验性C++ 11模式实现.有关实验C++ 11模式中可用的C++ 11功能的信息,请参阅 http://gcc.gnu.org/projects/cxx0x.html.要在GCC中选择此标准,请使用选项'-std = c ++ 11'; 要获得标准所需的所有诊断,您还应指定'-pedantic'(或'-pedantic-errors',如果您希望它们是错误而不是警告).

http://gcc.gnu.org/projects/cxx0x.html页说:

重要提示:GCC对C++ 11的支持仍然是实验性的.某些功能是基于早期提议实现的,并且在更新它们以匹配最终的C++ 11标准时,不会尝试保持向后兼容性.

的libstdc ++页面还显示,这是不完整的.(我甚至认为regex尚未实施.)

Steve Jessop的答案基本上在最后一段中说了同样的内容,但引用他答案的第一部分:

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

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

  • 正则表达式在4.9中实现."完全"支持的概念含糊不清.如果他们等待bugzilla为空,他们将永远不会切换. (7认同)

Ali*_*Ali 13

更新:原来的答案在过去28个月已经过时.根据nobar的回答,GCC 6.1默认支持带有GNU扩展的C++ 14.GCC 6.1于2016年4月27日发布.我很惊讶但很高兴看到新标准的快速采用!

至于原始答案的其余部分,我仍然看到保持该部分的价值,以回答如何使某些标志"默认".所以我把它放在下面.


有什么计划,我只能说[...]

你可以在Makefile中定义默认标志,然后你要说的就是make.

接受的答案如何在gcc中启用C++ 11?应该让你入门(或一些makefile教程).

Stackoverflow中经常出现的另一个建议是添加一个bash别名alias g++="g++ --std=c++0x",请参见此处.但是,我本人不会这样做,它会导致令人不快的意外; C++ 11已经发生了重大变化.我会创建自己的makefile并简单输入make.


  • 匿名小票对任何人都没有帮助。我的答案怎么了? (2认同)