命名空间和头文件的区别与联系:
首先要明白重要的一点:必须先声明命名空间,后声明对命名空间的使用(using)!如下:
注意,不可忽略using namespace mine!
接下来讨论命名空间和头文件的区别与联系:
1.命名空间是放在头文件中的。(然而在C++PrimerPlus第269页最下面一段却如此表述:“#include语句将头文件iostream放在名称空间std中”,本人不明白这句话是什么意思,希望高人指点)如下:
(函数的声明和实现分开)
2.预处理期间,test.cpp中的”mine.h”头文件会被展开替换成其中的内容,如下:
这样就实现了前面的要求:先声明命名空间,后声明对其的使用!
补充说明:
- 之前一直想不明白不加<iostream>,只写using namespace std,编译器为何不会实时检测到错误,如下:
std下方没有出现红线,然而如果是自定义的命名空间,直接using而不声明,则会如下:
后来想想,可能是因为std是编译器内置的标识符,所以不会即时报错。从下图的索引便能看出:
然而,不引入<iostream>头文件而直接using namespace std仍是错的,因为没有提前声明;
补充说明:
- 有人可能会问,为何在上面图片中,mine.cpp中不直接using namespace mine?如下:
而非要这样:
这是因为,在定义函数时,即使其名字和namespace中的函数名相同,两者仍是两个完全不相关的函数,即void display(int a)是在重新声明另一个新的函数,与namespace中的display(int a)无关!如果想要定义命名空间mine中的display(),则必须采用第一种方法!!!否则可能出现以下错误:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术