C++ 我应该使用最新的GCC版本吗(一般来说,特别是今天)

C++ 我应该使用最新的GCC版本吗(一般来说,特别是今天),c++,gcc,C++,Gcc,我想知道使用最新的GCC版本是否安全,或者人们通常会返回几个版本(如果是的话,返回多少个版本)。是否有可信的版本可以被认为(相对)没有bug,或者我可以安全地假设(对于非救生程序)最新的GCC版本可以安全使用 编辑: 所谓安全——我指的主要是无bug的,即在执行方面 如果没有相反的具体要求,我倾向于使用我的(合理最新的)Linux发行版提供的任何版本的gcc。到目前为止,这个策略对我来说非常有效。我倾向于使用最新版本,因为它实现了最新的功能,修复了错误,但不幸的是引入了新的错误。介绍错误通常是在

我想知道使用最新的GCC版本是否安全,或者人们通常会返回几个版本(如果是的话,返回多少个版本)。是否有可信的版本可以被认为(相对)没有bug,或者我可以安全地假设(对于非救生程序)最新的GCC版本可以安全使用

编辑:


所谓安全——我指的主要是无bug的,即在执行方面

如果没有相反的具体要求,我倾向于使用我的(合理最新的)Linux发行版提供的任何版本的
gcc
。到目前为止,这个策略对我来说非常有效。

我倾向于使用最新版本,因为它实现了最新的功能,修复了错误,但不幸的是引入了新的错误。介绍错误通常是在一些奇怪的角落的情况下,所以我认为它是安全的,总是使用最新的版本。< /P> < P>更好的C++ 11支持是最新的GCC版本。您可能需要自己编译它,但请注意,GCC4.7即将发布,因此,您可能想尝试一下。我已经做了很多,几乎所有的GCC版本从4开始,为了改进C++标准的符合性,并且经常在编译时间和优化程序上得到改进。p> 一般来说,最好使用最新的g++编译器

然而,有几次我使用的库出现了问题。例如,g++的4.5版本打破了我使用的boost::xpressive版本。或者更确切地说,它揭示了图书馆里的一些坏东西。另外,使用g++的级别越高,在使用其他编译器编译代码时遇到的问题就越多,新特性的实现就越滞后


我的观点是:是的,使用最新的编译器版本,使用新标准的优点,因为它们使我更高效,更快乐。然后,如果我必须将我的代码移植到另一个编译器,我只需调整我需要的部分代码,这最终不会花费太多时间。

在普通主机系统上,我会使用OS/发行版提供的内容,并可能并行安装几个版本。在我的macosx系统上安装了gcc-4.2(OSX标准)、gcc-4.6.2、gcc llvm(OSX标准)和gcc头。这样,我就可以很容易地尝试一些东西,更新gcc-HEAD,使其具有最先进的性能,但仍然可以为我的日常开发提供可用的和受支持的版本

在商业/工作环境中,我建议您在写下所使用的版本号时要非常通俗易懂,并实际备份整个编译器工具链,以便以后在维护需要时可以回到一个工作相同的系统。没有什么比让编译器以恼人的方式(缺少定义等)稍微更改更恼人的了


这对于嵌入式开发更为重要,到目前为止,我实际上将编译器工具链保存到git中。gcc中版本的轻微变化可能意味着一个令人讨厌的编译器错误(我印象中,这些错误在嵌入式平台上发生的频率更高),也可能意味着大小的变化,例如40字节,这可能会完全抹杀您的项目。

如果您想要C++11支持,最新版本是指HEAD还是最新版本(我想是4.6.2)?我们是否应该假设安全是指生产中的安全执行?或者是我们正在谈论的标准合规性(例如,安全,因为代码是可移植的,不需要更改)?@MatthieuM+1虽然我相信OP在这里谈到了执行安全(“救命计划”),但我编辑它是为了澄清我在安全方面的意思。我知道没有明确的答案,但我想了解什么是非新版(如我)C++开发人员决定使用的版本。你说的头是什么意思?你能澄清一下吗?@dan12345是开发部门的最新建议。是的,因为我使用的是2006年发行版的网络linux,它不支持c++11——在这种情况下,我被迫明确决定要下载哪个版本。(这里的系统管理员显然不重视linux版本的更新,也不重视他们的工作)这又是一个新手的评论——但是在什么情况下我想移植我的代码呢?我的意思是我写的,我可以带我最喜欢的C++编译器,无论我去哪里,不是吗?或者您指的是为我以外的用户分发代码的情况吗?我想知道的是,在有些情况下,我必须至少在项目的一部分中切换编译器:如果我需要在Windows上编译项目,那么在Windows上获取最新的gcc版本通常是很困难的(我实际上不知道怎么做)。另一种情况是,当您需要使用与某些SDK捆绑在一起的gcc时,比如Android的one或Google的NaCl。另一种情况是,如果你想尝试,例如,英特尔的C++编译器,他们说这是更好的优化循环(有时我可以得到代码运行9或10%更快英特尔编译器,但这是很久以前)。