GCC 使用旧版本的 C++

Posted

技术标签:

【中文标题】GCC 使用旧版本的 C++【英文标题】:GCC using old version of C++ 【发布时间】:2014-08-09 19:38:54 【问题描述】:

我正在使用 cplusplus 网站教程学习 C++。我正在使用以下软件:

CentOS 6.4 代码::Blocks 10.05 GCC 4.4.7

这些是 yum 提供的最新版本。当我学习本教程时,我注意到它所说的很多内容对我不起作用。例如,我不能在字符串前面加上“u”、“U”、“L”等。此外,“nullptr”无法识别,它会产生编译器错误。我环顾四周,注意到这些功能是在 C++11 中添加的。所以我当然认为我必须有一个旧版本的 C++。

根据this page 第 2.2 节中的 GCC 文档,“如果没有给出 C++ 语言方言选项,则默认值为 -std=gnu++98”。

所以我想我需要指定 -std=gnu++0x。我尝试将它放在我的 Code::Blocks 编译器参数中,但它没有任何改变。相反,我检查了编译器标志“让 g++ 遵循即将到来的 C++0x ISO C++ 语言标准 [-std=c++0x]”。这也没有改变。

谁能告诉我我需要做什么才能让 Code::Blocks 和 GCC 使用当前版本的 C++?

【问题讨论】:

您的gcc 版本旧:gnu.org/software/gcc/releases.html。考虑更新它。 IIRC,nullptr 是 GCC 4.5,但无论 C++ 标准如何,L"blah" 都应该可以工作。 该标准自 2011 年起不会推出。 在superuser.com/questions/381160/…查看答案 @msknapp "为什么 yum 有这么旧的版本?"因为您使用的是注重稳定性的发行版:现有系统具有旧版本的 GCC,升级可能会破坏这些系统,因此 CentOS 保留在旧版本上。 【参考方案1】:

启用 C++11 功能的规范标志是 -std=c++11,但由于 GCC 扩展,大多数 C++11 功能无论如何都应该开箱即用。无论如何,您都应该设置标志,因为当您可以采用新标准时,依赖扩展是一种不好的做法。

但是,您的 GCC 版本有点过时了。你应该从你的包管理器或者https://www.gnu.org/software/gcc/index.html获取最后一个稳定版本

或者,您可以尝试其他编译器,其中很多都支持 C++11。 Clang(++) 是一种流行的选择。

【讨论】:

对于 CentOS 6,OP 有他们提供的当前编译器。它们往往滞后很多(如前所述,为了稳定性),除非您依赖更新的功能,否则这很好。 当然,这对于成千上万用户共享的服务器或机器来说非常好。但对于单用户台式计算机,滚动发布通常是更好的选择。在这两种情况下,都没有禁止 OP 从源代码(包括 gcc)手动安装他想要的任何软件的任何版本。

以上是关于GCC 使用旧版本的 C++的主要内容,如果未能解决你的问题,请参考以下文章

链接使用不同版本的 gcc 编译的库

旧发行版上的二进制兼容性(使用 C++11)

使用 gcc c++ 获取 Windows 版本

更改不支持使用 compilers.yaml 文件编译 C++ 程序的 gcc 版本

英特尔 C++ 编译器:最高 GCC 版本兼容性是多少?

GCC 函数的 Visual C++ 版本