据我所知,名称空间std包含所有的C++标准库,其中一个标准库是iostream,它包含对象cout和cin。
std namespace
|
iostream
|
cout, cin上面的结构正确吗?或者它是不同的?
发布于 2017-03-23 01:17:58
据我所知,名称空间std包含所有的C++标准库,其中一个标准库是iostream,它具有函数cout和cin。
不完全是。
std中,但在使用旧的头文件形式(<stdio.h>而不是<cstdio>)时,我们也有std之外的C组件,以及assert宏。objects.<iostream>不是scoped.std::cin,std::cout也不是函数,而是C++ ISO标准正式命名为“输入/输出库”的头的名称(std::iostream是一个很少使用的typedef,因为库中的std::basic_iostream<char> class).std::iostream拉入。例如,可以通过<initializer_list>或通过像std::cout这样的includes来使用std::initializer_list不深入太多细节,头文件和作用域是C++中的两个正交概念。换句话说,它们是并行存在的。它们之间没有有用的层次结构。
发布于 2017-03-23 01:20:05
当您假设标准库中的所有内容都包含在std名称空间中时,您是正确的,只有少数例外,根据标准中的17.6.1.1/§3:
除了宏、新运算符
和删除运算符之外,所有库实体都定义在命名空间std中或嵌套在命名空间std中的命名空间中。未指定在特定名称空间中声明的名称是直接在该名称空间中声明,还是在该名称空间内的内联名称空间中声明。
然后,当你说“库”时,这里只有一个库,那就是“标准库”。iostream是这个库的头文件。但这并不意味着头中的所有内容都在特定的名称空间中。
例如,cin和cout直接位于std命名空间中,但包含在<iostream>标头中。
https://stackoverflow.com/questions/42957970
复制相似问题