【问题标题】:How well does boost use c++11?boost 使用 c++11 的效果如何?
【发布时间】:2012-11-28 15:20:19
【问题描述】:

Boost 本质上是一个 c++03 库(它激发了 c++11 标准)。我正在考虑使用一些 boost 库(那些没有在 c++11 中实现的库)。如果我使用的是 c++11,boost 是否编译(可能存在不可复制但可移动的对象的问题)?以及 boost 对 c++11 特性的使用效果如何(可变参数模板是 [一些 boost 库] 使用的显而易见的东西,而不是 boost MPL 的大部分)? (我在 boost FAQ 中找不到这个)。

【问题讨论】:

  • 我最大的抱怨是 boost::optional 和 boost::variant 缺乏移动语义。但是,boost 的其他几个部分确实具有移动语义。
  • boost::serialization 库在我上次查看时不知道 std::shared_ptr
  • 我只想指出,今天下午刚刚将移动语义添加到 Boost.Variant 中(不,我没有这样做)。希望它们会在 2 月发布 1.53 版本。
  • @flexo。如果功能请求尚不存在,请随意创建。

标签: c++ boost c++11


【解决方案1】:

Boost 正朝着使用 C++11 功能的方向发展。

但要记住的一点是,boost 不是“库”,而是库的集合。其中一些(例如boost::array)可能永远不会更新为使用许多 c++11 功能。当您在标准中有std::array(基于boost::array?)时,为什么要这样做?

另一方面,Boost 希望对仍在使用 C++03 的人保持有用。

注意:尽管我写的好像“Boost”是一个单一的实体,但有很多人为 Boost 做出了贡献,他们有很多不同的意见。 ;-)

要了解各种 boost 库如何与 C++11 编译器配合使用,您可以查看 Boost Testing 网页。

【讨论】:

  • +1 获取 Boost 测试的链接!是的,我知道 boost 有很多库。一个(即 Boost)可以使用宏 __cplusplus 的值来启用/利用一些 c++11 功能,但在其他方面保持 c++03。此外,一些 boost 开发人员可能有兴趣为 c++11 进行开发。这将需要任何 boost 内部依赖项才能在 c++11 下正常工作。
  • 如果 boost::array 没有实现 C++11 语义,用户编写可移植代码(特别是 Boost 库)应该使用条件编译,这是不可取的。
  • @VicenteBotetEscriba 我在这里没有看到问题。您只需为 std::array(如果 __cplusplus >= 201103L)或 boost::array 定义一个 typedef。这里有什么不受欢迎的?
【解决方案2】:

C++11 尽可能向后兼容。除非 boost 使用的是 C++11 新的保留关键字,否则我没有理由知道为什么它不应该在新标准下编译得很好。

【讨论】:

  • 在某些极端情况下,向后兼容性被破坏了(我记得某些类的默认移动构造函数存在问题,但我不太记得了)。
  • @Cubic:我没有意识到这一点。谢谢你提到它。我将不得不留意其他边缘案例。
猜你喜欢
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 2021-01-22
  • 2011-12-28
  • 2012-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多