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

Jen*_*das 11 c++ boost c++-standard-library

我经常在这里看到关于提升的注释,例如

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

要么

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

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

我并不是真的想要提出有关提升的意见.我正在寻找一些具体的例子,在使用boost之前我应该​​三思而后行.

Chr*_*ckl 15

当我不能使用提升?在我看来,提升是STL的伟大扩展,有时非常重量级和笨拙,但仍然很好.

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

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

  • 除了一些特定的可移植性边缘情况外,我基本上从未见过有人推荐 boost _而不是_标准库。所以我觉得你的后半段理由都不适用。 (2认同)

Lig*_*ica 8

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

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

我不会列举所有不可行的情况,但不言而喻,你不能总是使用非标准代码.并不是每个人都在一个平台上工作,你可以简单地编写yum install boost-devel,编写代码并继续前进.计算机世界远远超出商用台式PC.

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

好像很多模糊不清

我不认为写"如果你可以使用Boost"这句话可以说是"很多[大惊小怪]".

  • @Dúthomhas:“同样的人”真的有点太过分了。 (2认同)
  • @Dúthomhas:但是http://www.boost.org/community/index.html说:*"尽管Boost是由C++标准委员会图书馆工作组的成员开始的,但参与已经扩展到包括来自C++社区的数千名程序员在逃."* (2认同)
  • 哈哈。不错的樱桃采摘。这个怎么样:“_** Boost.org 和 C++ 标准委员会之间有正式的关系吗?** 没有,尽管委员会的许多成员都参与了 Boost,以及那些参与启动 Boost 的都是委员会成员。_”哦,或者这个:“_我们旨在建立“现有实践”并提供参考实现,以便 Boost 库适合最终标准化。_” (2认同)
  • @Dúthomhas:没有人对你有“愤怒”,也没有必要采取防御措施。冷静下来。而且我坚持认为,它作为“不仅仅是另一个 C++ 库”的 _political_ 状态与围绕决定是否使用它的技术考虑无关。 (2认同)

Yak*_*ont 5

主要是维护.

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

两者都是昂贵的和后备成本.对于具有几十年测量寿命的项目,这样的成本非常重要.

  • @ein _"但是对于你使用的任何库都是如此"_对,在同一场景中,我希望看到"如果你可以在这里使用<库名>"这句话.所以我不认为这是放弃这个的理由!事实上,答案是,Boost库与"你使用的任何库"没有区别,至少在这个意义上. (5认同)
  • @einpoklum 这个问题也随着图书馆规模的扩大而扩大。一个小型的、狭窄的库需要审计的东西更少(这个组件稳定吗?),并且当你更新它时,你的项目中的依赖项往往更少。Boost 可以轻松地覆盖整个项目,升级以修复网络代码的问题可能会破坏项目中其他地方的基于精神的解析代码(或者,至少需要进行审核以确保它不会中断) . (2认同)