命名空间和预处理器

Namespaces and the Pre-Processor

本文关键字:处理器 预处理 命名空间      更新时间:2023-10-16

我在理解C++中的预处理器和名称空间时遇到了一些问题。例如,考虑以下程序:

#include <iostream> 
int main() 
{
    using namespace std;
    cout << "Hello World!" << endl;
    return 0; 
}

因此,当这个程序准备编译时,预处理器会识别#include指令,并将iostream文件添加到程序中,以便程序具有I/O功能(即"cout"answers"endl")。现在,根据我的教科书,类、函数和变量是C++编译器的标准组件,它们被放置在命名空间std.中

这是令人困惑的,因为如果标准函数("cout"answers"endl")被放在这个命名空间中,iostream的目的是什么?我基本上是想理解为什么我们需要iostream和一些关于正在使用的命名空间的信息。

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

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

而不是

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

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

头文件<iostream>包含一些有用内容的声明,包括变量std::coutstd::endl

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