为什么人们似乎暗示我宁愿不使用Boost?

时间:2015-10-31 14:55:01

标签: c++ boost c++-standard-library

我经常在这里看到有关提升的说明,例如

  

如果您使用Boost很好......

  

如果你可以使用Boost ......

我想知道,那到底是什么?我应该厌倦什么?当我不能使用提升?不使用提升的原因是什么? 在我看来,提升是STL的伟大扩展,有时非常重量级和笨拙,但仍然很好。

我并不是真的在提出有关提升的意见。我更愿意在使用boost之前考虑一些具体的例子。

4 个答案:

答案 0 :(得分:13)

  

什么时候我不能使用提升?在我看来,提升是STL的重大延伸,   有时非常重量级和笨拙,但很棒。

Boost不是一个图书馆,而是一个基本上独立的图书馆的个人品质集合。考虑到这一点,并考虑到我个人是Boost的大部分粉丝,这里有一些我不能使用某些Boost库的原因:

  • 自C ++ 11以来,一些Boost库是多余的。
  • 有些图书馆没有被广泛使用,因此需要您的项目中的专业知识,当员工离开公司时,可能需要更换资金。
  • 公司准则,开发商必须遵守政治原因而非技术原因。
  • 您无法保证将来会继续维护任何Boost库。由于简单的商业原因,今天为某些编译器编写的标准C ++代码很可能会在10年后由同一供应商继续使用更新的编译器。有了Boost,你必须希望有足够能干的人对长期维护感兴趣。
  • 没有Boost库被广泛记录,在无数书籍和互联网上有如此多的材料作为C ++标准库。如果您对特定图书馆有一些非常奇特的问题,谁会支持您?当然,使用标准C ++,您找到具有相同问题的人(以及针对该问题的现有解决方案)的机会要高得多。
  • 调试一些Boost代码比调试使用标准库的代码更困难。

答案 1 :(得分:8)

因为是C ++标准库的扩展(当然也不是STL的扩展)。

这是第三方发行版,您必须在本地下载和安装,并且(对于某些Boost库,如果您动态链接)在目标系统上。您必须管理并记录依赖项。

我想要列举所有不可行的场景,但不言而喻,您不能总是使用非标准代码。并非所有人都在一个平台上工作,您只需编写yum install boost-devel,编写代码并继续。计算机世界远远超出商用台式PC。

话虽如此,由于其极端的可移植性以及大多数Boost库仅为标头(这显着降低了封装开销)这一事实,避免Boost的大多数论点都非常弱。

  

看起来好像没什么毛茸茸

我不认为写短语"如果你可以使用Boost" 可以诚实地描述为"很多[fuss]&#34 ;

答案 2 :(得分:5)

主要是维护。

添加提升后,您必须维护它。获取更新(并维护任何更改,强制更改代码),或冻结版本并自行修复错误。

两者都是昂贵的并且需要支付成本。对于具有数十年寿命的项目,这样的成本非常重要。

答案 3 :(得分:3)

除了@ LightnessRacesInOrbit的point之外,我想说有几个原因:

  1. Boost在.h.hpp文件中有很多代码,您需要将其包含在每个翻译单元中(使用Boost的相关部分),以及这些文件充满了复杂和递归的宏使用和智能 - 但同样,复杂 - 使用模板。这种组合使你的编辑速度变慢了。
  2. 默认情况下,Boost并未安装在任何地方,因此仅仅因为C ++和标准C ++库而无法使用它。
  3. (实际上是一个新原因)Boost功能的很大一部分已经变成了C ++ 11(更多的是C ++ 14,更多的是C ++ 17)。因此,到目前为止,标准库中还有其他选项,甚至是Boost提供的部分语言本身。