boost 库是不是依赖于 std C++ 库?

Posted

技术标签:

【中文标题】boost 库是不是依赖于 std C++ 库?【英文标题】:Does the boost library depend on the std C++ library?boost 库是否依赖于 std C++ 库? 【发布时间】:2010-09-14 23:48:31 【问题描述】:

我们需要在 Windows 平台上编写小型快速代码,我知道在某些情况下 boost 仅具有标头实现。它们需要很小是有原因的,所以我们一直小心不要因为大小而实际使用标准 C++ 库。

我的问题是,使用 boost asio 或 system 是否也会在 windows 下的 std C++ 库中拖拽?

编辑:是的,小而快。我知道 std c++ 库的某些部分即使不比 C 快也非常快。但是,大小对我们来说是一个因素,因为最终用户会即时下载它们,我们不希望任何主要依赖项或大量下载,例如拉入 MFC 使用一个功能!我们倾向于将 C++ 用作 C++ 的扩展版本。只使用对象,没有 RTTI,没有 IO 流。

我想我的问题可以归结为: boost 的哪些部分可能使用流库? ASIO 会不会让我的代码膨胀,而不仅仅是直接使用 win32 API?

【问题讨论】:

仅标头库(即任何模板化的库)往往会使应用程序大小膨胀,而不是缩小,因为实现是内联的而不是共享的。如果你的目标是小,你最好使用 C 而不是 C++。如果不编写大量自定义代码,C++ 的小而快是很困难的。现在,您可能会在发布模式下使用 Windows 上的整个程序优化获得一些运气。它可能能够消除冗余代码,但需要在大小和速度之间进行权衡。 @Nathan:只需通过编译器选项优化大小而不是速度。这一点都不难。如果模板实例化仍然占用太多,只需将 T 更改为 void* 并进行强制转换。 (贸易安全和易用性的大小。)C++ 到 C 不仅仅依赖于模板。 使用标准库如何导致代码量大?我怀疑你自己实现的任何执行相同功能的东西都会变得更小(iostream 可能除外) @GMan,我在做一个概括。我讨厌消除安全性(一旦你介绍了 C,我就知道,你已经完成了)。老实说,我认为 OP 最好自然地编写代码然后配置文件以查看在哪里提高速度。即使在当今功能最差的计算机上,我也几乎不认为 C++ 标准库中的链接是一个问题。 @Nathan:一个不真实的概括。使编译器可能内联通常不会导致代码膨胀。编译器并不愚蠢,除非回报值得,否则不会内联。经常与模板相关的代码膨胀有不同的原因 【参考方案1】:

当然,Boost 只是提供了一个抽象层。它必须在某些时候使用 C++ STL 库。如果你不相信我,请检查代码。

【讨论】:

称它为 STL 或 stdlib,但请不要称它为 STD 库 ;v) The STL is part of C++. I don't understand why people act like it is not. 编辑前更好... +1 为它是什么 C++ 标准库和“STL”不是一回事。当然,部分 SGI STL 被合并到 C++ 标准库中,但将整个 C++ 标准库简单地称为“STL”是完全不正确的。例如,数学库不是 STL 的一部分,而是 C++ 标准库的一部分。 @James:这有关系吗?让 Herb Sutter 和 Scott Meyer 停止错误地使用术语“STL”,然后我承认它可能也值得向 SO 用户宣讲。但在那之前,这只是一种“我比你更迂腐”的炫耀。实际上,如果您询问 C++ 程序员,STL 并不是指 SGI 库,而是指派生自所述 SGI 库的 C++ 标准库的子集。 @SimpleCoder:Boost 根本没有 使用 STL。这样做很方便,但肯定没有必要。他们本可以使用 C 标准库,甚至可以依赖特定于操作系统的功能并自己提供一切。【参考方案2】:

Boost 可以很好地使用 STL 或其他 C++ 标准库,但我认为你最好的选择不是对此有偏见,而只是尝试包含 ASIO 或任何你需要的东西,看看你的编译/优化模块是否仍然很小足以满足您的要求。

您提到“小而快”,好像 STL 并不小或快,但它在两个方面都非常紧凑,也许它仍能满足您的要求——它被设计为非常高效...

【讨论】:

以上是关于boost 库是不是依赖于 std C++ 库?的主要内容,如果未能解决你的问题,请参考以下文章

提高 C++ 语言版本和标准库依赖项方面的要求

为 Sony NMOS 实现编译 C++ boost 库

Boost库初见

如何为“类似boost”的多组件库编写cmake模块?

C++ 中的 std::thread 库是不是支持嵌套线程?

请教在C++里如何把string类型转换成long型?