使用STL或模板是否有任何缺点.是否存在任何不合适的情况.
首先,您应该使用它们,如果它们可以帮助您解决问题.模板是C++中非常重要的一部分,多年来一直是标准的一部分.STL在运行时非常强大和快速,应该在所有体面的编译器上得到支持,但当然存在问题.
如果您有一个非常旧的编译器,可能不完全支持STL.
STL实现的线程安全性可能适用于您的应用程序
模板可能导致编译时间变慢,可能导致可执行文件更大,特别是对于较旧的编译器.
编译器经常使用模板在代码上产生难以理解的错误消息.
仅举几例,但不使用它们的缺点可能会更大.
明显的缺点:
语法可能很糟糕 - C++中的一些模板语法真正推动了理智的极限,并与语言的其他部分重叠(例如>>)
很多人不太了解STL,所以你可能会限制你的观众.
错误消息往往非常复杂.
STL集合的设计往往会导致大量的对象复制.原始的"智能指针"(std :: auto_ptr)不适合在大多数集合中使用.最近这方面的情况有所改善(TR1)
有几个潜在的好处和缺点
模板扩展了生成的代码的大小.
模板化代码在编译时进行扩展和处理,这可能会使编译时间更长.(另一方面,可执行代码可能更有效).
使用不当的STL元素会导致代码变慢
STL实际上使代码更具可读性(我的观点与Will的不同).就像任何语言或库,你必须了解它适当地使用它...这是谁的人一个缺点,不知道这一点.
如果您在元编程意义上使用模板(不要使用STL混淆),代码看起来就像是一种完全不同于C++的语言.解析代码实际执行的操作可能更难.(OTOH,做得对 - 元编程让你专注于架构和设计;它也会带来更多的错误来编译时间与运行时间.当你有一个关键功能并且你可以捕获错误编码的片段时,这是一个很大的胜利在编译时,而不是让客户在操作期间捕获它!)
话虽如此,我们使用C++和模板(以及在某些领域,元编程技术),以利于我们的整体代码库.代码略大于没有模板的代码,但性能和可维护性的权衡大于规模.我们拥有熟练/经验丰富的C++程序员,致力于开发和维护代码.
如果您使用缺点来决定是否使用C++功能/库 - 请确保您同样权衡语言和项目/产品/公司愿意权衡的好处.希望这可以帮助.
编辑:我忘了提到的另一个主要缺点 - 便携性.如果您需要编写可移植代码,模板可能不是正确的方法.今天大多数流行的编译器都支持STL,但大多数都不是全部.元编程技术可以成为可移植性的真正杀手,因此这是决定其使用的适当性的明确考虑因素.