“-std=c++0x”和“-std=c++11”的区别是什么?

19

我知道这些标记是用于Eclipse中的C++11。

但我不知道它们之间有什么区别以及哪一个更受欢迎。

看起来它们都可以正常使用C++11。


这些是gcc / g ++的命令行选项;它们与Eclipse无关(除了可以从Eclipse调用编译器)。 - Keith Thompson
2个回答

26

你应该优先选择 -std=c++11

(注意: 我假设你问题中的 -std=c++11x 是个笔误)

旧的 -std=c++0x 只在老版本编译器不支持 -std=c++11 时需要使用,他们选择这个名称是为了表达当时即将推出的 C++11 特性(以及 ABI) 的初步和不稳定的性质 (当时还不确定它最终会成为 C++10 还是 C++12)。在 C++11 标准正式发布之前,他们根据标准的不断变化修订了一些细节。

如果你的编译器支持 -std=c++11,就没有理由使用 -std=c++0x。关于兼容性: 可能会存在差异和不兼容性,但这并不仅限于使用 -std=c++0x,而是取决于特定版本的编译器。当编译器同时支持两者时,它们应该是相同的。


3
有趣的事实:在 Stack Overflow 网站上,C++11 和 C++0x 的标签被合并了,尽管 @HowardHinnant 是唯一一个拥有银色 C++11 和 C++0x 徽章的人!(还有11个人在这两个类别中都有青铜徽章)。 - TemplateRex
我已经修正了问题中的打字错误。 - Keith Thompson

3

C++和C标准通常以它们发布的年份命名,这样更容易记忆。

例如,在C++中,最初的标准是在1998年发布的,所以我们称之为C++98,当我们提到它的第一个修正版,即2003年发布的时候,我们称之为C++03。

曾经传言下一个标准将在2008年完成,但由于不确定性,它被称为C++0x,其中x代表8或9。然而,实际上,计划发生了变化,所以我们最终得到了C++11。

尽管如此,对于下一个版本(C++1x),Bjarne Stroustrup表示他打算在5年内完成它(大约在2016年)。目前,核心语言有一些变化(概念、模块和垃圾回收),重点似乎更多地放在扩展库上(例如文件系统),但现在还为时过早,谁知道呢!


4
C++1y预计于2014年推出,C++1z预计于2017年推出。 - TemplateRex
1
C++17于2017年12月发布。维基百科页面上有一个很好的发布日期表格:https://en.wikipedia.org/wiki/C%2B%2B#Standardization - James Moore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接