首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >名称空间、标头和对象的层次结构

名称空间、标头和对象的层次结构
EN

Stack Overflow用户
提问于 2017-03-23 00:50:19
回答 2查看 120关注 0票数 0

据我所知,名称空间std包含所有的C++标准库,其中一个标准库是iostream,它包含对象cout和cin。

代码语言:javascript
复制
std namespace 
       |
   iostream
       |
   cout, cin

上面的结构正确吗?或者它是不同的?

EN

回答 2

Stack Overflow用户

发布于 2017-03-23 01:17:58

据我所知,名称空间std包含所有的C++标准库,其中一个标准库是iostream,它具有函数cout和cin。

不完全是。

  • 虽然几乎所有的标准库都在名称空间std中,但在使用旧的头文件形式(<stdio.h>而不是<cstdio>)时,我们也有std之外的C组件,以及assert宏。objects.
  • <iostream>不是scoped.
  • std::cinstd::cout也不是函数,而是C++ ISO标准正式命名为“输入/输出库”的头的名称(std::iostream是一个很少使用的typedef,因为库中的std::basic_iostream<char> class).
  • Certain组件可以由不同的std::iostream拉入。例如,可以通过<initializer_list>或通过像std::cout这样的includes来使用std::initializer_list

不深入太多细节,头文件和作用域是C++中的两个正交概念。换句话说,它们是并行存在的。它们之间没有有用的层次结构。

票数 1
EN

Stack Overflow用户

发布于 2017-03-23 01:20:05

当您假设标准库中的所有内容都包含在std名称空间中时,您是正确的,只有少数例外,根据标准中的17.6.1.1/§3:

除了宏、新运算符

和删除运算符之外,所有库实体都定义在命名空间std中或嵌套在命名空间std中的命名空间中。未指定在特定名称空间中声明的名称是直接在该名称空间中声明,还是在该名称空间内的内联名称空间中声明。

然后,当你说“库”时,这里只有一个库,那就是“标准库”。iostream是这个库的头文件。但这并不意味着头中的所有内容都在特定的名称空间中。

例如,cincout直接位于std命名空间中,但包含在<iostream>标头中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42957970

复制
相关文章

相似问题

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