C++中命名空间的概念及使用详解
作者:Pin_na
什么是命名空间?
字面意思来理解,命名空间主要有两个点——“名字”和“空间”。
通过这两个关键词,我给大家简单描述一下什么是命名空间(看下面↓)
举个例子:
有一个学校,世界之大无奇不有,恰恰这个学校就比较奇怪。那你可能就会问了,这个学校究竟奇怪在哪里?这个学校奇怪的就是不仅有很多生日相同的学生,还有不少同学重名重姓。然后有一天放学,学校里有人捡到了一个钱包,里面有张三的学生证,这个钱包就被送到了校长手里,校长看着学生这么懂事,对其大加赞赏,于是便打开广播同时向各班表扬了这名学生,并且让名叫张三的学生来校长办公室一趟。过了几分钟,校长打开门一看,门外站了七八个大汉,原来这些分别都是二三四各个班的张三,还有各个年级的张三,校长瞬间蒙圈,也不知道自己叫的是哪个张三了。
故事讲完了,上面的各个班级各个年级就是不同的“空间”,张三就是一个“名字”,那个蒙圈的校长自然就是编译器啦。“校长”蒙圈,程序自然就无法正常的执行了。那么为什么校长没有找到真正的张三呢?原因就在于各个空间中的变量、函数、类命名发生了冲突、命名被相互污染了,所以为了解决这种问题,我们就加入了命名空间。之后校长再要找张三,他就会在广播上喊高二三班的张三来我办公室一下,就可以精确的找到需要找的内容了。
概念
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作 用域中,可能会导致很多冲突。
使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字 污染,namespace关键字就是针对这种问题而出现的。
定义
namespace + 命名空间名称 + { 命名空间成员 }
特点
1. 普通的命名空间
namespace N1 // N1为命名空间的名称 { // 命名空间中的内容,既可以定义变量,也可以定义函数 int a; int Add(int left, int right) { return left + right; } }
2.命名空间可以嵌套
namespace N2 { int a; int b; int Add(int left, int right) { return left + right; } namespace N3 { int c; int d; int Sub(int left, int right) { return left - right; } } }
3. 同一个工程中允许存在多个相同名称的命名空间(编译器会合成到同一个命名空间)
// 编译器最后会合成同一个命名空间中 namespace N1 { int Mul(int left, int right) { return left * right; } }
一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中
命名空间的三种使用方式
1.加命名空间名称及作用域限定符
int main() { printf("%d\n", N::a); return 0; }
2.使用using将命名空间中成员引入
using N::b; int main() { printf("%d\n", N::a); printf("%d\n", b); return 0; }
3.使用using namespace 命名空间名称引入
using namespce N; int main() { printf("%d\n", N::a); printf("%d\n", b); Add(10, 20); return 0; }
到此这篇关于C++中命名空间的概念及使用详解的文章就介绍到这了,更多相关C++中的命名空间内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!