C++ 或 C++0x - 哪个是更好的标准? [关闭]

Posted

技术标签:

【中文标题】C++ 或 C++0x - 哪个是更好的标准? [关闭]【英文标题】:C++ or C++0x - Which is a better standard? [closed] 【发布时间】:2011-04-13 13:03:06 【问题描述】:

所以我一直在尝试做一些研究,并希望其他开发人员对此主题发表意见。我是一位经验丰富的 C++ 程序员,并且使用当前的 C++ 标准已有一段时间了。我一直在阅读“C++0x 无疑将成为新标准”的文章。每个人都认为我们离切换到一个全新的编程标准还有多远?另外,在您看来,哪个是更好的标准?根据我的理解,C++0x 将附带更多的标准库,使开发更容易,而无需更多的依赖。请帮我赶上!

谢谢! 丹尼斯 M.

【问题讨论】:

实际上,他们都适合阅读(枯燥无味)。但是,当考虑如何最好地杀死 SO 上提出愚蠢问题的人时,C++0x 标准显然是赢家。它更厚,可以在当前标准的一半时间内压碎头骨:-) “C++”和“C++0x”都不是标准。最新的 C++ 语言规范是 C++03。 'C++0x' 是用于最新语言规范 draft 的绰号。 Herb Sutter 表示,他预计最新的草案可能会被批准为“C++11”,这意味着在 2011 年获得批准,或者如果需要更改,最迟在 2012 年,这意味着草案将成为“C++12” . @paxdiablo,你不能说规范完全枯燥无味。有复活节彩蛋。例如,FCD 第 1107 页的脚注:“341) 原子物体既不活跃也不具有放射性。”是的,我确实是通过阅读坟墓自己找到的。 @Nathan,哇,我印象深刻。我只使用该标准来查找特定问题,而不是像 Grisham 的书那样从头到尾阅读它 :-) 我很难相信,但它就在 n3092 页面的底部草案。我不敢相信他们会把它留在里面,这几乎是闻所未闻的。我想向WG21的成员道歉。显然,他们并非无知。我想你可能指的是 tome,虽然 tomb 更有趣,“死者的地方”。 @pax:它确实已被删除。 :( 【参考方案1】:

如果 C++ 的下一版本在数量上比当前版本更差,那将是非常可悲的。新版本的重点是改进。

【讨论】:

自然而然。但是我读到了一些关于“Boost”类似于 C++0x 的内容;这种说法离我们很远吗?我觉得 boostlib 在某些方面非常有用,但我自己并不是它的忠实粉丝。对于这样一个看似愚蠢的问题,我很抱歉,我试图简单地了解事物在何处移动的更好概念。 @Dennis:Boost 是一个非官方的“事实上的”C++ 标准库,旨在提供与 C++ 标准库配合良好的库。 Boost 中广泛有用的库最终会成为标准库(就像 shared_ptr<T> 之类的事情已经发生的那样)。在boost.org 阅读所有相关信息 @Ken,真的。但是@Dennis,当然,就像标准库的任何部分一样,是否以及何时使用它是您的选择。所以,例如如果你没有使用boost::shared_ptr,你不必突然开始使用std::shared_ptr Boost 和 C++0x 实际上密切相关——很多相同的人都在研究这两者。【参考方案2】:

好吧,这取决于。

当前的 C++ 标准 (C++03)当前“更好”,因为大多数最新的 C++ 编译器和标准库实现都非常符合标准。是的,存在一些问题,但其中大多数是众所周知的(例如,几乎没有任何编译器支持导出)或者很容易解决。

目前对 C++0x 的支持相当不完整。不同的编译器支持不同的部分,并且在去年对其进行了相当大的修改,因此如果您考虑到它们与最新草案的一致性,那么为某些功能提供早期支持的编译器现在是“错误的”。

不过,展望未来,C++0x 将是对 C++03 的巨大改进。并发内存模型以及标准线程和原子库等主要功能对于该语言的未来极为重要。移动语义将使编写干净、高性能的代码变得更容易。大多数新的语言功能将使使用 C++ 进行开发成为一种更愉快的体验。

【讨论】:

【参考方案3】:

“C++0x 无疑将成为新标准”是轻描淡写的说法。 C++0x 是新标准的草案。它的一部分现在可以在 G++ 4.5 等编译器中使用。

C++0x不可能在质量上比当前的 C++ 标准更差,因为新标准的基本要素之一是它完全向后兼容强>。如果有坏的部分,你可以避免它们。 (当然,这并不意味着 C++0x 中的新特性不能用于创建您必须处理的非常糟糕的代码,但是如果您自己编写代码,您可以随时选择避免您认为更糟糕的 C++0x 功能。)

【讨论】:

“关于新标准的一个重要方面是它完全向后兼容”——这是一个非常强烈的主张,可证明是不正确的。例如,以下有效的 C++03 程序:int static_assert = 0; - 不是有效的 C++0x 程序。这是一个微不足道的案例,但还有许多其他细微的差异。不过,它绝对是高度向后兼容的。 你有点夸张了。它不完全向后兼容。例如。 unusual uses of auto 将中断。此外,如果语言变得太大,它们可能会变得难以管理,从而“更糟”。我不认为 C++ 已经达到了这一点,但这肯定是一种普遍的可能性。 我只是那些使用“不可能”这个词的人。认为更高版本不能更糟的人没有见过我的朋友,Guido 的第三任妻子 :-) @dan04,我不是这么说的。 @paxdiablo:那是因为 Guido 的第三任妻子不是为了与他的第二任妻子完全向后兼容而构建的。【参考方案4】:

取决于您所说的“更好”是什么意思。如果您的意思是“更可能与我目前使用的任何编译器一起工作”,那么旧标准肯定会更好,加上一点boost。

【讨论】:

以上是关于C++ 或 C++0x - 哪个是更好的标准? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

是否有哪个编译器支持 C++ 标准的哪个部分的列表?

哪个更好,单 for 循环或双 for 循环迭代二维数组? C++

C++ Primer 0x0B 学习笔记

C++ Primer 0x06 练习题解

BigQuery - “经过的时间”或“消耗的槽时间”,哪个是更好的衡量标准?

对于 C++ 中的图问题,邻接列表或邻接矩阵哪个更好?