命名空间和预处理器
Namespaces and the Pre-Processor
我在理解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::cout
和std::endl
。
如果没有这些声明,编译器将不知道您在编写cout << ...
时所指的是什么。
相关文章:
- 错误:无效的预处理指令 #i 的意思是 #if?
- C++预处理会生成变量成员、资源库和映射
- 使用预处理指令检查是否包含标头?
- 预处理的 C/C++ 文件是否特定于计算机?
- 使用 GCC 对 C 文件进行部分预处理(不删除 "define" 指令)
- 在 CPLEX 中求解线性规划,无需剪切和预处理
- CPP -D 选项,用于预处理 Fortran 代码
- 错误:粘贴"tmp_UINT"和"+"未提供有效的预处理令牌
- 任务计划程序库的预处理不起作用 - 多定义错误
- Eclipse 问题 - 编译期间不考虑 .c 和 .cpp 文件中定义的预处理
- 使用python预处理后,C++(opencv)中的垫子类型数据与image_to_array相同
- Howo 使用 cl 预处理为 masm 组装生成一个单独的文件
- 我有一个预处理的 C/C++ 源文件 (cacti.i).如何从这个 .i 文件生成可执行二进制文件,以便我可以像 ./
- 如何使用Visual Studio C/C++编译器(cl.exe)来预处理我的objective-C代码
- 是具有预处理前分支实现的结构违反ODR
- 与不完整的Cholesky预处理的共轭梯度返回特征库的意外错误
- Visual Studio C - 无法输出预处理文件
- 在海湾合作委员会中加快宏观预处理的任何方法
- 所有结构成员的预处理器批处理
- 当头文件被预处理时是否有一个预处理器选项显示?