使用Boost C++库?

42

可能与以下问题重复:
Boost Library

在我尝试(但失败)完成C++项目时,经常在浏览网页时遇到 Boost。我尝试阅读 Boost 网站,但没有好的简短说明为什么要使用 Boost 以及它究竟是什么。

Python 让人们印象深刻的一点是它的一切都是内置的并且跨平台,如 Web 请求、电子邮件、XML、JSON 等。 Boost 是否也是这种情况?

因此,足够吐槽了,我的具体可回答的问题:

  • Boost 究竟是什么?
  • 为什么使用 Boost 是最重要的原因?
  • 是否完全跨平台?
  • 与快速忽略一个缓冲区溢出的自己编写的代码相比,Boost 更加“安全”吗?
  • 是否有链接指向描述 Boost 所有模块的页面,每个模块只需一两句话?

另请参阅https://dev59.com/BXVC5IYBdhLWcg3w-mdO。 - Jon
9
针对没有得到回答的问题,Boost 库不像 Python 库那样进行底层实用的工作,比如 XML、JSON、email 或 HTTP 处理。Boost 库更抽象和更底层。尽管如此,仍然非常有用,但是它提供了不同类型的功能。 - Omnifarious
1
@Omnifarious:谢谢,那是我问题中最重要的部分之一。 - orlp
6个回答

47

什么是 Boost?

Boost 是 C++ 的一组实用、高质量的库,可补充标准库中相对较小的功能。

使用 Boost 的最重要原因是什么?

Boost 提供了 C++ 中缺失的高质量工具。它们的使用范围极其广泛,因此是否需要使用 Boost 完全取决于您的需求。但可以肯定地说,每个足够大的 C++ 代码库都将从使用 Boost 中受益。

其中一些最灵活的部分是 shared_ptr(引用计数智能指针,有助于防止指针丰富的代码中的内存泄漏)、array(提供一个非常方便的封装,围绕 C 风格数组的固定大小)以及其他一些小型怪异的位,这些已被整合到下一代 C++ 标准中。

它是否完全跨平台?

几乎总是是的。这是 Boost 的主要特点之一。

有没有链接到描述 Boost 所有模块的一页说明(每个模块只需一两句话)?

确实有。


6
只需在您的代码中使用boost::shared_ptrboost::scoped_ptr,再也不需要写delete语句了,这已经足以成为使用boost的一个很好的理由。 - Alexandre C.

12

1) Boost是一套API,由一些C++领域的顶尖人物开发。你可以根据需要选择使用。每个API都针对并解决特定的编程范式。例如:

lexical_cast<>  - Type-safe ways of casting from one type to another.
program_options - Library for parsing command lines in a type-safe manner
asio            - Asynchronous Input/Output.  Great for working with sockets, IP4/IP6
shared_ptr      - Reference-counted smart pointer

...等等。

2) 使用Boost最重要的原因之一是,那些优秀的开发者已经完成了这项工作。这些解决方案经过同行评审,并且非常健壮。如果您需要解决问题,并且Boost具有适合您的API,那么您应该使用它。

3) 它几乎是跨平台的。也就是说,是的。

4) 我会使用Boost而不是任何人自己编写的代码。自制代码往往只被单个开发者(编写代码的人)使用。Boost在商业应用程序中得到广泛使用,正如我之前所说,它经过同行评审。您不可能找到比这更健壮的东西了。

5) 主要的Boost页面列出了按功能和字母顺序排列的库列表。


C++11的std::_shared_ptr是从Boost的shared_ptr中借鉴而来的,对吗?那它们应该是相对一致的,嗯? - knoxgon

10

什么是Boost?

Boost是一个C ++库的集合,可以帮助您避免编写解决常见问题的自定义代码。

使用Boost的最重要原因是什么?

Boost可以节省您设计、实现和测试其提供的解决方案的时间。这将为您节省大量时间,并帮助您避免出现错误。

它是否完全跨平台?

Boost支持许多平台,有时会针对特定平台提供解决方案以提高效率。您可以在当前版本page底部的 Compilers Tested 标题下查看已测试的平台。

与快速忽略一个缓冲区溢出等问题的常规自制代码相比,它是否更“安全”?

是的,除非您有大量时间来测试代码。 Boost包括一个自动化测试套件,并通过每日使用由数十万甚至数百万开发人员进行测试。它还具有许多文档,可帮助您使用包含的库进行开发。 Boost不仅比大多数自制代码更安全,而且通常性能更好。

是否有链接到描述所有Boost模块的页面,每个模块只有一两句话?

Boost Library Documentation链接页面提供了所有Boost库的一句话摘要。


3
Boost是C++的一个类和其他东西的集合,这些东西在STL中缺失。Boost中的许多库都被包含在新的C++标准中。由于这些代码被广泛使用并经过同行评审,因此它绝对比您能想出的更安全。通常它是完全跨平台的,但可能会有一些陷阱。
至于Boost中有什么,请查看这个链接:http://www.boost.org/doc/libs/1_45_0/?view=categorized

3
BOOST是一个库的集合,满足许多C++项目的需求。通常情况下,它们确保正确性、可重用性、可移植性、运行时性能和空间效率优于BOOST实现代码的可读性,或者有时编译时间。它们往往不涵盖完整的高级功能要求(例如应用程序框架),而是(幸好)提供可以更自由地组合而不需要指定或主导应用程序设计的构建块。
考虑使用BOOST的重要原因包括:
- 大多数库都经过良好的测试和设计:它们通常会得到一些优秀程序员的合理审查,相比于在同一问题空间中具有自定义解决方案的人们,并且被广泛使用以收集大量的实际反馈。 - 它已经写好了,而你的解决方案可能没有。 - 它非常便携(但每个库都有所不同)。 - C++社区中更多的人将为帮助您的代码提供头脑风暴。 - BOOST通常是引入C++标准的试验场,因此您将不必在将来的标准中重新编写代码以与BOOST兼容。 - 由于社区需求,编译器供应商更有可能测试并处理BOOST使用的正确性问题。
这里简要介绍了这些库:http://www.boost.org/doc/libs/

2

对我来说,Stack Overflow 的目的不仅仅是回答问题。它也涉及到收集和分享知识的问题。在我看来,这种回答并没有为社区提供任何价值。 - turbopapero
@auserdude 同意!在 SO 中,发布其他网页而不解释自己的知识不应该被允许。 - knoxgon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接