使用C ++ Boost库有什么优势?[关闭]


122

因此,我一直在阅读,看来Boost库在实践中得到了很多使用(尽管不是在我的商店里)。为什么是这样?是什么让它如此美妙?


10
Nitpick:它不是首字母缩写词,所以它是Boost(或boost),而不是BOOST。当然,除非您大喊大叫;)
Niklas

10
@Niklas当您使用任何预处理程序宏= P时
Boost

@KitsuneYMG我仍然看到问题已被编辑,但是我很确定OP不会使用问题字段来编辑预处理程序代码;)
Niklas

3
@Nikias我只是个聪明人= P。一个人必须有爱好。
KitsuneYMG,2011年

没有Boost的C ++很烂:)
TriCore

Answers:


134

Boost之所以被广泛使用是因为:

  • 它是开源的,并且经过同行评审。
  • 它提供了STL缺少的广泛的平台不可知功能。
  • 它是对STL的补充,而不是替代。
  • 许多Boost开发人员都在C ++标准委员会中。实际上,Boost的许多部分都被认为包含在下一个C ++标准库中。
  • 它被很好地记录在案。
  • 它的许可证允许将其包含在开放源代码和封闭源代码项目中。
  • 它的特点是不通常依赖于对方,所以你可以只链接您所需要的零件。[ 卢克·赫米特Luc Hermitte)的评论]

5
另外,我们也可以说boost子库可以彼此独立使用(少数核心库除外)。例如,并不是因为我们使用boost.shared_ptr,而是必须使用boost.ublas。
Luc Hermitte

我喜欢看到看起来像百科全书条目的答案。这样很容易获得大量材料。+1
泰勒·史密斯

似乎每个图书馆都依赖于MPL ...
Viktor Sehr

Boost允许一次写入,跨平台开发和使用是否正确?
FilBot3

它可免费用于商业用途吗?
Mayur

39

在主页上:

“ ...世界上最受尊敬且设计最专业的C ++库项目之一。” — Herb Sutter和Andrei Alexandrescu,C ++编码标准

“第55项:熟悉Boost。” — Scott Meyers,Effective C ++,第三版。

“对于大多数程序员而言,显而易见的解决方案是使用一个库,该库提供独立于所需服务的优雅且高效的平台。示例是BOOST ...” — Bjarne Stroustrup,抽象,库和C ++中的效率

因此,它是一系列广泛使用和接受的库,但是为什么需要它呢?

如果你需要:

  • 正则表达式
  • 功能绑定
  • lambda函数
  • 单元测试
  • 智能指针
  • 不可复制,可选
  • 序列化
  • 通用日期
  • 可移植文件系统
  • 循环缓冲区
  • 配置工具
  • 通用图像库
  • TR1
  • 线程数
  • 布拉斯

以及更多使用C ++进行编码时,请看一下Boost


23

由于它们向标准库中添加了许多缺失的内容,因此其中的一些东西已包含在标准中。

助推人不撒谎:

组织为什么应该使用Boost?

总之,生产力。使用诸如Boost之类的高质量库可以加快初始开发速度,减少错误,减少重新设计,并降低长期维护成本。而且由于Boost库倾向于成为事实上的或法律上的标准,因此许多程序员已经熟悉它们。

C ++标准库的TR1中包含了十个Boost库,因此计划用于以后的全面标准化。更多的Boost库正在准备用于TR2。使用Boost库使组织可以在采用新技术方面抢先一步。

许多组织已经在使用通过Boost实现的程序,例如Adobe Acrobat Reader 7.0。


16

一些Boost类非常有用(shared_ptr),但我认为它们在Boost中具有一些特质和概念。与任何模板繁多的代码一样,Boost的编译时间和巨大的二进制大小完全是疯狂的。必须保持平衡。我不确定Boost是否找到了它。


10
您忘记了Boost不是一个库而是许多库。此外,您还必须针对该功能抵消较大的尺寸和编译时间。性格和观念对发展有很大的帮助。编译时间确实是付出了很小的代价。
康拉德·鲁道夫

8

它添加的库允许使用更现代的C ++编程方法。

以我的经验,很多C ++程序员实际上是1990年代初期的C ++程序员,几乎编写C ++类,而没有大量使用泛型。更为现代的方法使用泛型将软件组合在一起,这更像是动态语言,但最终您仍然可以获得类型检查/性能。看起来有点难看。但是一旦您克服了语法问题,它的确是相当不错的。Boost提供了许多轻松组成内容所需的工具。智能指针,函数,lambda,绑定等。然后是boost库,它们利用这种较新的C ++编写方式来提供网络,正则表达式等内容。

如果您正在编写大量的for循环,手动滚动函数对象或进行内存管理,那么您绝对应该检查一下boost。


8

BOOST集合了许多C ++项目共同需要的库。通常,它们的确将正确性,可重用性,可移植性,运行时性能和空间效率放在BOOST实现代码的可读性(有时是编译时间)之上。它们往往不能满足完整的高级功能需求(例如,应用程序框架),而是(谢天谢地)提供可以更自由地组合而无需决定或主导应用程序设计的构建块。

考虑使用BOOST的重要原因包括:

  • 大多数库都经过了良好的测试和设计:与具有相同问题空间中采用自家解决方案的人相比,它们通常得到一些优秀程序员的合理声音审查,并且被广泛使用以收集广泛的真实反馈
  • 它已经写好了,您的解决方案可能还没有
  • 它非常便携(但是随库而异)
  • C ++社区中的更多人将在帮助您编写代码方面抢先一步
  • BOOST通常是C ++标准介绍的试验场,因此在没有BOOST的情况下,您无需编写太多代码即可重写代码以与将来的标准兼容。
  • 由于社区的需求,编译器供应商更有可能测试和应对BOOST使用的正确性问题
  • 熟悉Boost库将帮助您在其他项目中(可能在其他公司中)进行类似的工作,在这些公司中,您现在编写的任何代码可能都无法重用

这些库在以下两行中描述:http : //www.boost.org/doc/libs/




3

Boost基本上是标准将成为标准的内容提要,此外,Boost可以使您获得所有同行的评审和使用,因此可以肯定,您的依赖关系可以得到很多好处。

但是,大多数商店不使用Boost,因为Boost是一个外部依赖项。实际上,减少外部依赖性也很重要。


3

Boost对C ++有点像.NET Framework对C#,但也许规模较小。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.