关于c ++:命名空间和预处理器

Namespaces and the Pre-Processor

我很难理解C++中的预处理器和命名空间。例如,考虑以下程序:

1
2
3
4
5
6
7
8
9
10
#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;它所做的只是让你写作。

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

而不是

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

命名空间"包含""IoSt流"定义(除了由标准C++库提供的其他定义之外),仅在EDCOX1"5"字元隐含地"前缀"到所有名称的意义上。此"包含"与"iostream文件包含输入/输出函数定义"中的"包含"不同:该文件字面上包含这些定义;std::命名空间名称只是一个前缀,可以避免名称冲突。


头文件包含多个有用事物的声明,包括变量std::coutstd::endl

如果没有这些声明,编译器就不会知道您在编写cout << ...时所指的是什么。