22

我们将开始一个使用 C++ 作为编程语言的长期项目。

我读到 C++0x 将在 2011 年问世,所以他们称之为 C++11。

当 C++11 出现时,我们仍将开发该项目,并且想知道现在是否可以使用新 C++ 标准的任何特性,以便能够:

  • 代码比旧的 C++ 和
  • 新标准到来时轻松切换?
4

6 回答 6

14

页面显示了 gcc(主要 Unix 编译器)、MSVC(主要 Microsoft 编译器)和其他一些(包括 Intel)支持的 C++0x 部分。Clang 的额外信息在这里虽然我认为他们对当前标准的 c++ 支持仍然不完整。

于 2010-03-16T09:22:42.943 回答
13

仅仅因为一个标准的出现并不意味着编译器会神奇地得到更新——大多数编译器需要数年时间才能为以前的标准提供合理的支持,而某些功能从未得到太多支持,例如导出(从 C++0x 中删除) . 依赖于新功能的首次实现也不是一个好的策略——如果我在截止日期前工作,我更愿意让其他人成为实验者。

此外,我不会太快将其称为 C++11 - 标准过程充满了延迟的可能性。

编辑:我看到你正在使用 RW 库。在这种情况下,新标准的许多特性可能不会立即引起人们的兴趣,因为它们针对的是模板编写者和 C++ 标准库的用户。

于 2010-03-16T09:36:25.993 回答
4

Scott Meyers(“Effective C++”系列的作者)上周刚刚上传了以下内容:

gcc 和 MSVC 中的 C++0x 功能可用性总结

从某种意义上说,这类似于该线程的不同答案中提到的另一个链接。主要区别在于迈耶斯的链接只包含他自己尝试过的东西。我预计它将在未来几个月内不断更新。

此外,这就是我发现这一点的方式,他在 comp.std.c++ 上暗示他正在研究与 C++0x 教育材料相关的东西(显然超出了他的培训课程),但现在这太投机了,所以让我们坚持我上面提供的第一个链接。

于 2010-03-16T17:25:00.587 回答
4

Visual C++ 2010 和最新的 gcc 版本 (-std=c++0x) 支持 C++11 的新功能,但不是全部。特别是,您可以开始使用带有大括号的新初始化语法;恕我直言,这是 C++11 中最大的语法变化。如果一个部分使用 C++98 风格而另一部分使用 C++11 风格,这也是会在您的代码中添加最多不一致的更改。

于 2010-03-16T09:20:49.763 回答
2

不要将其视为一次切换到所有新功能。根据其自身的优点和实现质量来评估每个新的语言特性。

例如long long,甚至在考虑用于 C++0x 之前,它就已经是一个相当常见的编译器扩展,并且新auto语法很有用并且可能会得到很好的支持。您可能需要非常谨慎地处理几个新功能的复杂组合,例如类型推断与decltype函数的类型,->使用可变参数模板和新的解析规则在类中使用新语法>>

于 2010-03-16T13:02:31.203 回答
1

这取决于您使用的编译器。

例如,GCC 有 tr1 扩展,其中包含 C++11 中的一些特性。

于 2010-03-16T09:16:46.423 回答