【问题标题】:Why is "-std=c++0x" still needed for g++ 4.6.2? [closed]为什么 g++ 4.6.2 仍然需要“-std=c++0x”? [关闭]
【发布时间】:2011-12-23 14:48:07
【问题描述】:

我下载并构建了 gcc 4.6.2。我发现对于 C++11 功能,仍然需要命令行选项 -std=c++0x。这是为什么?不是应该默认支持吗?

    $ g++ --version
    g++ (GCC) 4.6.2
    Copyright (C) 2011 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

【问题讨论】:

  • 有趣的问题。其他编译器 (VC10) 选择默认包含新功能。我真的很想知道他们为什么在这里走不同的道路。
  • 我更恼火的是默认值甚至不是-std=c++98
  • 保持简单,愚蠢。您想使用其他标准吗?指定它。甚至总是指定要使用的标准。如果这不符合您的口味,请使用会自动配置它的 IDE。或者重用一个 Makefile 附加配置文件。
  • @R.MartinhoFernandes,gnu 编译器默认是gnu++98 不是很自然吗?
  • @Geoffroy,并不是说 OP 不知道如何处理这个问题。

标签: c++ gcc g++


【解决方案1】:

因为

  • C++11 才 4 个月大,对它的支持还远未完成或测试
  • 在没有重大公告和准备阶段的情况下更改默认设置并不好
  • 尚不清楚默认值是否会更改(请参阅 -std=C99)。

【讨论】:

  • 我们不要忘记 GCC 4.6 系列已经有将近 9 个月的历史了,在不到 5 个月之前他们不会做出这样的重大改变。 (4.6.2 版本可能没有那么旧,但这只是严格的错误修复。)
  • @ams:确实,我认为这很明显,但提及它可能很有用。
【解决方案2】:

阅读 GCC 网站:

Status of Experimental C++0x Support in GCC 4.6

因此,您不能将默认设置设为实验性的。 而且,它是在C++11标准发布之前,并没有定义实际名称,这就解释了为什么C++0x而不是C++11。

如果您对 GCC 4.7 感兴趣,它仍处于试验阶段:

Status of Experimental C++11 Support in GCC 4.7

【讨论】:

    【解决方案3】:

    仍然需要它,并且在可预见的未来可能会保持这种状态,因为C++11 has incompatibilities with C++03。将 G++ 改为默认编译 C++11 会破坏很多现有代码。

    【讨论】:

    • 现有代码并不真正很多。委员会在最大限度地减少现有代码中断方面做得很好。
    • @R.MartinhoFernandes,相反,编码人员做得很好!
    【解决方案4】:

    我认为它被称为0x 的事实给了你一个提示。它甚至不完整(见http://gcc.gnu.org/projects/cxx0x.html

    【讨论】:

      猜你喜欢
      • 2015-08-15
      • 2018-07-25
      • 2013-04-20
      • 2012-10-12
      • 2014-06-19
      • 2018-07-21
      • 2011-04-15
      • 1970-01-01
      相关资源
      最近更新 更多