C++0x 和 C++11 有啥区别?
Posted
技术标签:
【中文标题】C++0x 和 C++11 有啥区别?【英文标题】:What is the difference between C++0x and C++11?C++0x 和 C++11 有什么区别? 【发布时间】:2012-03-02 18:46:04 【问题描述】:我在 SO 上看到这两个术语的混合用法。
Wikipedia says
C++11,以前也称为 C++0x ...
但我不知道为什么。
为什么先叫 C++0x,然后叫 C++11? 另外,x 代表什么?我的猜测 - 像一个变量?【问题讨论】:
零表示规范的编写者过于乐观(程序员不总是这样吗?) C++0x 是一个非常乐观的名字。称它为 DukeNukem,呃,C++4ever 会更现实。 我不明白零和乐观之间的联系是什么。 @RenéNyffenegger 零代表乐观,因为人们认为该标准将在 2000 年代的十年内完成,因此将被称为 C++08 或 C++09。实际上,它直到 2011 年才完成。 好的,我现在明白了。我一直认为0x
是为了引入十六进制文字。
【参考方案1】:
C++ 和 C 标准通常以其发布年份命名,这样更容易记住。
例如,在 C++ 中,最初的标准是在 1998 年发布的,所以我们谈论的是 C++98,而当我们提到它在 2003 年发布的第一次更正时,我们谈论的是 C++03。
据说下一个标准将在 2008 年完成,但由于不确定,它被称为 C++0x,其中x
代表 8 或 9。但实际上,正如我们大家都知道,计划发生了变化,所以我们最终选择了 C++11。
不过,对于下一个版本 (C++1x),Bjarne Stroustrup 表示他打算在 5 年内完成(大约 2016 年)。目前,对核心语言(概念、模块和垃圾收集)的设想有一些变化,而且重点似乎更多地放在扩展库(例如文件系统)上,但现在还为时过早,谁知道呢!
【讨论】:
有很多东西被推到了下一个标准:概念、垃圾收集、模块......(垃圾收集可能是最接近准备好的。模块仍然需要大量工作。) @JamesKanze:我没有听说过垃圾收集,我忘记了模块(谢谢)。模块本身实际上很容易(许多语言已经有了它们),我记得 Doug Gregor 说真正的问题实际上是将模块和实际的标头系统连接成一个连贯的整体,这样你就不需要等待你的依赖项在你做之前迁移。 Doug 一直在努力将模块集成到 Clang 中,但似乎对 CLang 3.1 的 lambdas 做了一些改进。 来自未来的消息,我们有 C++14 和 C++17【参考方案2】:C++0x 是标准在发布/最终确定之前的名称。一旦它最终确定(在 2011 年),我们就能够正确命名它。也就是C++11。
【讨论】:
并且根据 Bjarne 的“‘x’是十六进制”的俏皮话,它也可能是 C++0B。 :P @JonPurdy 最初的目标是在 2009 年之前推出最终标准。Bjarne 发表了关于 x 是十六进制的评论,很明显我们不会成功。 (他可能是讽刺的意思。我不知道。) @JamesKanze:嗯,是的。这是个笑话。标准委员会必须做一些事情来缓和情绪。【参考方案3】:因为标准计划在200x
发布/批准,但实际上在2011
获得批准。
【讨论】:
【参考方案4】:当新标准开始工作时,大约在 1998 年左右,没有人知道它会在哪一年完成 - 所以“x”代表未知的年份,希望它会在十年内完成左右。
最终,它在 2011 年完成,因此该标准现在通俗地称为 C++11,正式名称为 ISO/IEC 14882:2011。
现在该标准已经正式发布,下一个标准的工作仍在继续;再说一次,没有人知道什么时候会完成,但它希望不到十年的时间,所以它通俗地称为 C++1x。
【讨论】:
以上是关于C++0x 和 C++11 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
SGI slist 和 C++11 forward_list 有啥区别?