首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++:性病“神奇地”存在吗?一直都是?

C++:性病“神奇地”存在吗?一直都是?
EN

Stack Overflow用户
提问于 2017-03-20 21:32:54
回答 5查看 688关注 0票数 5

作为一个C++初级程序员,我注意到无论您使用什么IDE/编译器,您都不需要显式地包含stl (标准模板库)。这是否意味着我可以依赖stl“始终可用”?

例如,如果我想使用std::cout,我只包含stl的iostream部分:

代码语言:javascript
运行
复制
#include <iostream>

...and不需要首先执行类似#include <std>的操作就可以继续这样的操作:

代码语言:javascript
运行
复制
std::cout << "Hello world!" << std::endl;

此外:我可以依赖于stl的一致性吗?stl的每个函数/方法都有相同的行为吗?或者C++发行版、操作系统或编译器之间是否有任何更改?

我之所以这样问,是因为当你不知道某些陷阱的时候,其他库有时真的会很痛苦。例如,特征(用于线性代数的东西)对我来说真的很难开始,我注意到一些版本之间的变化行为。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-03-20 21:42:56

是的,尽管对于只允许提供子集的独立实现有特殊的允许,但C++标准库必须随每个C++编译器一起提供,因为它是语言规范的一部分。(最初作为C++的扩展,最初被称为标准模板库,但现在更好的术语是C++标准库。)

C++标准库指定得非常好--您总是需要包含各种头文件才能引入标准库组件。所需的标头不会从编译器更改为编译器。在这方面,它是机器独立的。

随着标准的发展,哲学是尽量减少兼容性中断,但也有一些:例如,在C++11中对auto关键字的重新定义,以及从该标准开始对std::auto_ptr的否定。

大多数组件确实在保留的命名空间std中--有些函数不是因为遗留原因。最后,最好显式地使用std::,而不是通过使用

代码语言:javascript
运行
复制
using namespace std;

否则,您将使代码易受命名空间歧义的影响。

票数 9
EN

Stack Overflow用户

发布于 2017-03-20 23:06:09

几乎所有的C++编译器都将附带标准C++库。这些被称为“托管实现”。库定义得很好,虽然它确实在增长,但很少会以破坏旧代码的方式进行更改。标准委员会的一个主要目标是保持向后兼容性。

该标准还允许“独立实现”,它附带了一个非常精简的库,完全在标头中实现。在为嵌入式系统开发代码时,您可能会遇到这种情况,特别是当该系统没有底层操作系统时。这些是罕见的,但它们确实存在。(第7.6.1.13节讨论了独立实现。)

票数 4
EN

Stack Overflow用户

发布于 2017-03-20 21:57:57

这是否意味着我可以依赖stl“始终可用”?

是的,标准库是C++语言的一部分。因此,它保证它将“始终可用”与任何C++编译器。

我能依赖于STL的一致性吗?

是的,当然。C++标准库是聪明的头脑们的精力充沛的努力,他们为我们带来了痛苦,使我们不能时不时地重新发明轮子,或者不得不相信第三方库,因为它们最终可能会把你甩在后面。它尽可能由成员组成,并尽可能泛泛。

STL的每个函数/方法都有相同的行为吗?或者C++发行版、操作系统或编译器之间是否有任何更改?

C++标准库在C++标准中进行了描述。因此,可以保证在符合C++标准的编译器中,C++标准库的功能获得相同的行为,即标准兼容行为。C++发行版之间有一些更改(例如,附加功能),但向后兼容性得到了保证。也就是说,用C++98编写的代码仍然可以编译,现代的C++编译器支持C++17 (少数例外)。

我之所以这样问,是因为当你不知道某些陷阱的时候,其他库有时真的会很痛苦。

通常,鼓励您尽可能使用C++标准库,并避免提供与标准库相同功能的第三方库。这是由于许多原因,其中一些原因是:

  1. Readability:C++标准库是C++的通用语言。也就是说,使用标准库可以提高代码的可读性,并减少将维护代码的其他人的学习曲线。
  2. 稳定性:标准库非常稳定,使用它可以使代码库更加稳定。
  3. 保证生命时间支持:只要C++存在,标准库就会存在和维护。
  4. Interoperability:标准库是跨平台的。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42914351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档