为什么 g++ 4.6.2 仍然需要"-std=c++0x"?

Why is "-std=c++0x" still needed for g++ 4.6.2?

本文关键字:-std c++0x g++ 为什么      更新时间:2023-10-16

我下载并构建了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.

因为

  • c++ 11只有4个月的历史,对它的支持还远远没有完成或经过测试
  • 在没有大的公告和准备阶段的情况下改变默认值对人们来说是不好的
  • 目前还不清楚默认值是否会改变(参见-std=C99)。

阅读GCC网站:

GCC 4.6中实验性c++ 0x支持状态

因此你不能让默认值成为实验性的东西。此外,它是在c++ 11标准发布之前,并且实际名称没有定义,这解释了为什么c++ 0x而不是c++ 11。

如果你对GCC 4.7感兴趣,它仍然是实验性的:

GCC 4.7中实验性c++ 11支持状态

它仍然是需要的,并且在可预见的将来可能会保持这种方式,因为c++ 11与c++ 03不兼容。将c++默认编译为c++ 11将会破坏大量现有的代码。

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