所以,我一直在通读,似乎 Boost 库在实践中得到了很多使用(虽然不是在我的商店)。为什么是这样?是什么让它如此美妙?
11 回答
从主页:
“......世界上最受推崇和专业设计的 C++ 库项目之一。” — Herb Sutter 和 Andrei Alexandrescu,C++ 编码标准
“第55条:熟悉Boost。” — Scott Meyers,Effective C++,第 3 版。
“对于大多数程序员来说,显而易见的解决方案是使用一个库,该库提供一个优雅而高效的平台,独立于所需的服务。例如 BOOST……” — Bjarne Stroustrup,C++ 中的抽象、库和效率
所以,它是一系列广泛使用和接受的库,但你为什么需要它呢?
如果你需要:
- 正则表达式
- 函数绑定
- 拉姆达函数
- 单元测试
- 智能指针
- 不可复制,可选
- 序列化
- 通用日期
- 可移植文件系统
- 循环缓冲区
- 配置工具
- 通用图像库
- TR1
- 线程
- uBLAS
因为他们在标准库中添加了许多缺失的东西,所以其中一些被包含在标准中。
Boost人没有说谎:
为什么组织应该使用 Boost?
一句话,生产力。使用像 Boost 这样的高质量库可以加速初始开发,减少错误,减少轮子的重新发明,并降低长期维护成本。而且由于 Boost 库倾向于成为事实上或法律上的标准,许多程序员已经熟悉它们。
C++ 标准库的 TR1 中包含 10 个 Boost 库,因此计划在以后进行完全标准化。更多 Boost 库正在为 TR2 准备中。使用 Boost 库可以让组织在采用新技术方面处于领先地位。
许多组织已经使用通过 Boost 实现的程序,例如 Adobe Acrobat Reader 7.0。
一些 Boost 类非常有用(shared_ptr),但我认为它们对 Boost 中的特征和概念有点疯狂。编译时间和巨大的二进制大小对于 Boost 来说是完全疯狂的,就像任何模板繁重的代码一样。必须有一个平衡。我不确定Boost是否找到了它。
BOOST 的库集合满足了许多 C++ 项目的共同需求。一般来说,他们确实优先考虑正确性、可重用性、可移植性、运行时性能和空间效率,而不是 BOOST 实现代码的可读性,或者有时是编译时间。它们往往不涵盖完整的高级功能需求(例如应用程序框架),而是(谢天谢地)提供可以更自由组合的构建块,而无需指定或支配应用程序设计。
考虑使用 BOOST 的重要原因包括:
- 大多数库都经过了很好的测试和设计:与在同一问题空间中具有自制解决方案的人相比,它们通常得到一些优秀程序员的合理评价,并且广泛用于收集广泛的实际反馈
- 它已经写好了,你的解决方案可能不是
- 它非常便携(但每个库都不同)
- C++ 社区中的更多人将在帮助您编写代码方面处于领先地位
- BOOST 通常是引入 C++ 标准的试验场,因此您在重写代码以与未来标准兼容时无需 BOOST 即可完成更少的工作
- 由于社区需求,编译器供应商更有可能使用 BOOST 测试和应对正确性问题
- 熟悉 boost 库将帮助您在其他项目中做类似的工作,可能在其他公司,您现在可能编写的任何代码都可能无法重用
这些库在这里用一两行描述:http: //www.boost.org/doc/libs/。
它添加了允许更现代的 C++ 编程方法的库。
根据我的经验,许多 C++ 程序员实际上是 1990 年代早期的 C++ 程序员,他们几乎都在编写 C++ 类,而不是大量使用泛型。更现代的方法使用泛型以更像动态语言的方式组合软件,但最终您仍然可以获得类型检查/性能。看起来有点难看。但是一旦你克服了语法问题,它真的很不错。Boost 为您提供了许多轻松编写内容所需的工具。智能指针、函数、lambdas、绑定等。然后是 boost 库,它们利用这种新的 C++ 编写方式来提供诸如网络、正则表达式等之类的东西......
如果您正在编写大量 for 循环、手动滚动函数对象或进行内存管理,那么您绝对应该检查 boost。
因为 C++ 标准库并不是那么完整。
应注意任何与Kevlin Henney相关的事情。
Boost 基本上是标准将成为什么的概要,除了 Boost 获得的所有同行评审和使用,您可以非常确定您的依赖项获得了相当大的收益。
但是大多数商店不使用 Boost,因为它是外部依赖项。实际上,减少外部依赖也非常重要。
Boost 之于 C++ 有点像 .NET Framework 之于 C#,但规模可能更小。
我使用文件系统库退出了一点,boost::shared_ptr 非常漂亮。我听说它也做其他事情。