1

我在理解 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 和一些有关正在使用的命名空间的信息。

4

2 回答 2

3

严格来说,你不需要using namespace std;它所做的只是让你写

cout << "Hello World!" << endl;

代替

std::cout << "Hello World!" << std::endl;

命名空间“包含”iostream 定义(以及标准 C++ 库提供的其他定义)仅在std::隐含“前缀”到所有名称的意义上。这个“包含”不同于“iostream文件包含输入/输出函数的定义”中的“包含”:文件字面上包含定义;std::命名空间名称只是一个前缀,可让您避免名称冲突。

于 2013-02-10T00:17:43.177 回答
1

头文件<iostream>包括几个有用的东西的声明,包括变量std::coutstd::endl.

如果没有这些声明,编译器将不知道您在编写cout << ....

于 2013-02-10T00:17:00.937 回答