据我所知,命名空间std包含所有C ++标准库,其中一个标准库是iostream,它有cout和cin对象。
std namespace
|
iostream
|
cout, cin
以上结构是否正确?或者它有什么不同?
答案 0 :(得分:1)
据我所知,命名空间std包含所有C ++标准 库,其中一个标准库是iostream和它 有cout和cin的功能。
不完全。
std
中,但在使用旧标头表单(std
而不是<stdio.h>
时,我们还有<cstdio>
之外的C组件})和assert
宏,它没有作用域。std::cin
和std::cout
不是函数,而是对象。<iostream>
只是一个标题的名称,其中包含C ++ ISO标准正式命名的部分&#34;输入/输出库&#34; (std::iostream
类typedef
很少使用std::basic_iostream<char>
。#include
引入。例如,std::initializer_list
可通过<initializer_list>
或类似<vector>
的内容获得。在没有详细介绍的情况下,头文件和作用域是C ++中的两个正交概念。换句话说,它们彼此平行存在。它们之间/之间没有有用的层次结构。
答案 1 :(得分:1)
如果假设标准库中的所有内容都包含在std
命名空间中,包含一些例外,则标准中的17.6.1.1/§3符合标准,这是正确的:
除了宏 operator new 和 operator delete 之外的所有库实体都在命名空间 std 中定义,或者命名空间嵌套在命名空间 std中即可。未指定在特定名称空间中声明的名称是直接在该名称空间中声明还是在该名称空间内的内联名称空间中声明。
然后,当你说“图书馆”时,这里只有一个图书馆,即“标准图书馆”。 iostream
是此库的标题。但这并不意味着标题中的所有内容都在特定的命名空间中。
例如,cin
和cout
直接位于std
命名空间中,但包含在<iostream>
标题中。