命名空间和头文件的区别与联系:

首先要明白重要的一点:必须先声明命名空间,后声明对命名空间的使用(using)!如下:


注意,不可忽略using namespace mine!

接下来讨论命名空间和头文件的区别与联系:

1.命名空间是放在头文件中的。(然而在C++PrimerPlus第269页最下面一段却如此表述:“#include语句将头文件iostream放在名称空间std中”,本人不明白这句话是什么意思,希望高人指点)如下:

(函数的声明和实现分开)

2.预处理期间,test.cpp中的”mine.h”头文件会被展开替换成其中的内容,如下:

    这样就实现了前面的要求:先声明命名空间,后声明对其的使用!

补充说明:

  1. 之前一直想不明白不加<iostream>,只写using namespace std,编译器为何不会实时检测到错误,如下:

std下方没有出现红线,然而如果是自定义的命名空间,直接using而不声明,则会如下:

后来想想,可能是因为std是编译器内置的标识符,所以不会即时报错。从下图的索引便能看出:

然而,不引入<iostream>头文件而直接using namespace std仍是错的,因为没有提前声明;

补充说明:

  1. 有人可能会问,为何在上面图片中,mine.cpp中不直接using namespace mine?如下:

而非要这样:

这是因为,在定义函数时,即使其名字和namespace中的函数名相同,两者仍是两个完全不相关的函数,即void display(int a)是在重新声明另一个新的函数,与namespace中的display(int a)无关!如果想要定义命名空间mine中的display(),则必须采用第一种方法!!!否则可能出现以下错误:

posted @   QuanHa  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示