在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,
namespace
关键字的出现就是针对这种问题的。
文章目录
- 前言
- ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
- 👻一、什么时候使用命名空间?
- 👻二、 命名空间的定义
- 👻三、 命名空间的使用
- 👻补充
- 👻总结
- ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
前言
回顾一下关键字
关键字(keyword)属于保留字,是整个语言范围内预先保留的标识符。每个C++关键字都有特殊的含义。经过预处理后,关键字从预处理记号(preprocessing-token)中区别出来,剩下的标识符作为记号(token),用于声明对象、函数、类型、命名空间等。不能声明与关键字同名的标识符。 ------------百度百科
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
👻一、什么时候使用命名空间?
当使用rand而并没有引头文件时
全局变量rand与局部变量rand同时存在,根据就近原则,此时编译器是打印局部变量里的rand。此时变量rand还是可以正常打印的;
当使用rand而并引头文件#include<stdlib.h>时
此时,编译报错,“rand”: 重定义;以前的定义是“函数”,这就是因为这里定义的rand与库里的函数发生冲突了。
要想解决这个问题,namespace
就派上用场了
👻二、 命名空间的定义
需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。
例如:
namespace L
{
int rand=8;
}
命名空间可以定义变量/函数/类型,也可以嵌套定义命名空间
例如:
namespace L
{
int rand=8;
int add(int x,int y)
{
return x+y;
}
struck app
{
int w;
};
}
同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
👻三、 命名空间的使用
一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中
命名空间的使用有三种方式:
1.加命名空间名称及作用域限定符
“ ::”全区域访问
2.使用using将命名空间中某个成员引入
将命名成员部分展开
3.使用using namespace 命名空间名称 引入
这里使用using namespace 命名空间名称 引入时,这里的本意是把命名空间里定义的变量暴露在全局中;
但是这种方法,可能会导致与原有的全局变量冲突,所以不要轻易使用这种方法;
👻补充
当定义的变量在局部域、全局域和命名空间域都有时,编译器编译的顺序是局部域->全局域->命名空间域
👻总结
以上就是今天要讲的内容,本文仅仅简单介绍了命名空间,并介绍了它的定义与使用;