46

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

g++ -std=c++11 -o prog.x prog.cpp

当我可以说的时候有计划吗

g++ -o prog.x prog.cpp

编译prog.cpp

也许prog.cpp

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

4 回答 4

29

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

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

于 2015-10-20T14:15:58.070 回答
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还没有实现。)

史蒂夫杰索普的回答在最后一段中基本上说了同样的话,但引用他回答的第一部分:

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

  • 至少,该编译器及其使用的库中的 C++11 支持是完整的。如果编译器编写者对可靠性有任何顾虑,那么它也是稳定的。
  • 最好在编译器中增加主要版本号,因为 C++11 不完全向后兼容 C++03。
  • 理想情况下,在一个众所周知的时间表上,以便用户可以为更改做好准备。
于 2014-01-19T19:44:04.327 回答
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.


于 2014-01-19T22:51:39.393 回答
-3

默认情况下,GCC 5.0 似乎将具有 gnu11(c++11 AFAIK 的方言),并在更改中共享对 c++11 的改进。见https://gcc.gnu.org/gcc-5/changes.html。似乎它也会对 C++14 有一些支持。

就@marc-glisse 分享的关于bugzilla 场景而言,更有趣的陈述之一似乎不在讨论范围内,详情请参阅https://gcc.gnu.org/gcc-5/criteria.html:-

在 Bugzilla 中打开的所有回归都已经过分析,所有回归都被认为不太可能影响大多数用户,或者确定对受影响用户的影响最小。例如,诊断中的印刷错误可能相对常见,但对用户的影响也很小。

通常,编译器生成不正确代码或拒绝编译有效程序的回归将被视为严重到足以阻止发布,除非有实质性的缓解因素。- GCC 发布标准页面

时间表确实提供了一些关于何时以及是否会发生的想法https://gcc.gnu.org/develop.html#timeline

所以希望我们能在 2015 年看到一个默认支持 c++11 的新 gcc。GNU/Linux 发行版什么时候开始并为使用 c++11 构建的软件做任何他们需要做的事情完全是另一个问题。

于 2014-12-14T21:28:12.983 回答