> 文章列表 > 【C++初阶】(入门)命名空间

【C++初阶】(入门)命名空间

【C++初阶】(入门)命名空间

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染namespace关键字的出现就是针对这种问题的。

文章目录

  • 前言
  • ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
  • 👻一、什么时候使用命名空间?
  • 👻二、 命名空间的定义
  • 👻三、 命名空间的使用
  • 👻补充
  • 👻总结
  • ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

前言

回顾一下关键字

关键字(keyword)属于保留字,是整个语言范围内预先保留的标识符。每个C++关键字都有特殊的含义。经过预处理后,关键字从预处理记号(preprocessing-token)中区别出来,剩下的标识符作为记号(token),用于声明对象、函数、类型、命名空间等。不能声明与关键字同名的标识符。 ------------百度百科

【C++初阶】(入门)命名空间


✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

👻一、什么时候使用命名空间?

当使用rand而并没有引头文件时

【C++初阶】(入门)命名空间
全局变量rand与局部变量rand同时存在,根据就近原则,此时编译器是打印局部变量里的rand。此时变量rand还是可以正常打印的;

当使用rand而并引头文件#include<stdlib.h>时

【C++初阶】(入门)命名空间
此时,编译报错,“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.加命名空间名称及作用域限定符
【C++初阶】(入门)命名空间
“ ::”全区域访问

2.使用using将命名空间中某个成员引入
【C++初阶】(入门)命名空间
将命名成员部分展开

3.使用using namespace 命名空间名称 引入
【C++初阶】(入门)命名空间
这里使用using namespace 命名空间名称 引入时,这里的本意是把命名空间里定义的变量暴露在全局中;
但是这种方法,可能会导致与原有的全局变量冲突,所以不要轻易使用这种方法;


👻补充

当定义的变量在局部域、全局域和命名空间域都有时,编译器编译的顺序是局部域->全局域->命名空间域
【C++初阶】(入门)命名空间


👻总结

以上就是今天要讲的内容,本文仅仅简单介绍了命名空间,并介绍了它的定义与使用;

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

生活技巧大全