不使用STL的原因?

Woo*_*ops 15 c++ stl

可能重复:
对于STL或!STL,这是个问题

是否有人应避免在他/她的项目中使用C++ STL?

Phi*_*ipp 6

如果您不能使用RTTI和/或异常,您可能会遇到STL的某些部分无法正常工作.例如,对于原生Android应用程序就是这种情况.因此,如果它不能满足您的需求,那就是不使用它的理由!


dir*_*irk 6

当您选择使用像Qt这样的框架时,您可能会考虑使用Qt中的列表,向量等而不是STL.在这种情况下,不使用STL可以避免在需要在GUI中使用STL时将其从STL转换为Qt等效项.

这是有争议的,并不是每个人都想使用Qt的所有东西

来自http://doc.qt.nokia.com/latest/containers.html

这些容器类设计为比STL容器更轻,更安全,更易于使用.如果您不熟悉STL,或者喜欢以"Qt方式"执行操作,则可以使用这些类而不是STL类.

  • 我可以认为STL容器不是非常安全且易于使用的想法,但它们正是因为它们非常轻巧(不妥协的性能是一个主要目标),所以说明Qt的容器比"轻"_容STL似乎,呃,对我来说.(免责声明:我根本不知道Qt.) (2认同)

Pup*_*ppy 5

并不真地。没有理由禁止使用整个库 - 除非该库仅提供一种功能,而标准库则不然。所提供的设施应根据每个功能进行评估 - 例如,您可能会争辩说您需要一个比 执行更具体用途的容器vector,但这并不是禁止使用dequeiostream的借口for_each

更重要的是,通过模板生成的代码不会比手工编写的等效代码更加臃肿。您不会通过拒绝使用std::vector然后编写 float 和 double 的等效向量来节省代码膨胀。尤其是在 2011 年,在绝大多数情况下,与媒体等其他事物的大小相比,可执行文件的大小毫无意义。


dar*_*ioo 4

如果您非常关心可执行文件的大小,那么您可能希望避免在程序中使用 STL。

例如,uTorrent不使用 STL,这也是它如此之小的原因之一。

由于STL确实非常依赖模板(毕竟它是标准模板库),因此很多时候您使用模板,编译器必须为您在处理STL时使用的每种类型生成额外的代码。

这是编译时多态性,使用越多,可执行文件的大小就会增加。

如果您从项目中排除 STL(并谨慎使用或根本不使用模板),您的代码大小将会变小。请注意,它不一定会更快。

另请注意,我不是在谈论程序在执行期间的内存使用情况,因为这取决于您在应用程序的生命周期内分配的对象数量。

我说的是你的二进制文件的可执行文件。

如果您想要一个示例,请注意,一个简单的 Hello world 程序在编译后可能比一个巧妙的代码演示更大,后者可以在一个非常小的可执行文件中包含整个 3D 引擎(运行时生成)。


有关 uTorrent 大小的一些信息:

官方FAQ(从2008年开始),这个问题没有出现在最近的FAQ中。

uTorrent 是如何编程得如此高效的?

关于此的第二篇文章。

关于此的第三篇文章。

请注意,尽管 uTorrent >300kb 并且使用UPX压缩,但当您考虑到它的功能时,它仍然非常小。

  • uTorrent >300KB。我认为使用标准 STL 容器不会产生太大影响。特别是如果您认为编写自己的容器也需要空间。 (9认同)
  • -1:完全不同意这些评论:http://stackoverflow.com/questions/367216/does-using-stl-increase-footprint-significantly 事实上,它得到如此多的赞成票是令人不安的。 (6认同)
  • 您可能应该解释*为什么*STL 会导致代码大小膨胀 - 毕竟仅仅包含它并不会增加二进制大小...... (2认同)
  • 我发现我的回答最近受到了很多批评。我还没有看到足够令人信服的论据来解释原因。只是很多术语的挑剔和答案的链接(在我看来)与我自己的答案没有太大不同。因此,如果有人对此事有权威,我希望看到一个引用我的答案的答案,并指出哪些部分是明显错误的,哪些部分是真正正确的。 (2认同)