我在理解C中的预处理器和命名空间时遇到了一些麻烦 . 例如,请考虑以下程序:
#include <iostream>
int main()
{
using namespace std;
cout << "Hello World!" << endl;
return 0;
}
因此,当该程序准备好编译时,预处理器将识别#include指令并将iostream文件添加到程序中,以便程序具有I / O功能(即“cout”和“endl”) . 现在根据我的教科书,作为C编译器标准组件的类,函数和变量放在命名空间std中 .
这很令人困惑,因为如果标准函数(“cout”和“endl”)放在这个命名空间中,iostream的目的是什么?我基本上试图理解为什么我们需要iostream和一些有关正在使用的命名空间的信息 .
2 回答
严格地说,你不需要
using namespace std;
它只是让你写代替
命名空间"contains" iostream定义(在标准C库提供的其他定义中)仅在
std::
隐式"prefixed"所有名称的意义上 . "contains"与“iostream
文件包含输入/输出函数的定义”中的"contains"不同:文件字面上包含定义;std::
命名空间名称只是一个允许您避免名称冲突的前缀 .头文件
<iostream>
包含几个有用的东西的声明,包括变量std::cout
和std::endl
.如果没有这些声明,编译器在编写
cout << ...
时就不会知道你所指的是什么 .