我知道这些标记是用于Eclipse中的C++11。
但我不知道它们之间有什么区别以及哪一个更受欢迎。
看起来它们都可以正常使用C++11。
你应该优先选择 -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
,而是取决于特定版本的编译器。当编译器同时支持两者时,它们应该是相同的。
C++和C标准通常以它们发布的年份命名,这样更容易记忆。
例如,在C++中,最初的标准是在1998年发布的,所以我们称之为C++98,当我们提到它的第一个修正版,即2003年发布的时候,我们称之为C++03。
曾经传言下一个标准将在2008年完成,但由于不确定性,它被称为C++0x,其中x代表8或9。然而,实际上,计划发生了变化,所以我们最终得到了C++11。
尽管如此,对于下一个版本(C++1x),Bjarne Stroustrup表示他打算在5年内完成它(大约在2016年)。目前,核心语言有一些变化(概念、模块和垃圾回收),重点似乎更多地放在扩展库上(例如文件系统),但现在还为时过早,谁知道呢!