我在理解 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 和有关正在使用的命名空间的一些信息。
严格来说,你不需要
using namespace std;
它只是让你写
cout << "Hello World!" << endl;
而不是
std::cout << "Hello World!" << std::endl;
命名空间“包含”iostream 定义(以及标准 C++ 库提供的其他定义)仅在
std::
隐式“前缀”到所有名称的意义上。这个“包含”与“iostream
文件包含输入/输出函数的定义”中的“包含”不同:文件字面上包含定义; std::
命名空间名称只是一个前缀,可以让您避免名称冲突。
头文件
<iostream>
包含几个有用的东西的声明,包括变量std::cout
和std::endl
。
如果没有这些声明,编译器将不知道您在编写时所指的内容
cout << ...
。