C++ 命名空间

C

在C语言中只有一个全局作用域

C语言中所有的全局标识符共享同一个作用域

标识符之间可能发生冲突

C++

命名空间将全局作用域分为不同的部分

不同命名空间中的标识符可以同名而不会发生冲突

命名空间可以相互嵌套

全局作用域也叫默认命名空间

作用

避免名字定义冲突和使用库中相同名字导致的冲突,更好地控制标识符的作用域。

定义命名空间

namespace name{...}

使用

使用整个命名空间:using namespace name;

使用命名空间中的变量:using name::variable;

使用默认命名空间中的变量:::variable

默认情况下可以直接使用默认命名空间中的所有标识符

可以嵌套使用

namespace A{

namespace B{

a

}

}

使用:A::B::a

使用方式

a.using namespace std;

//namespace是一个命名空间的关键字,总的意思是:从此条命令后都是使用这个空间

b.using std::对象; //只能有一个对象

c.std::对象+其它

例子

使用标准库中的一个名字时,必须显式说明我们想使用来自命名空间 std 中的名字

namespace std1{ int a1 = 1;};

namespace std2{int a1 = 2;};

int main()

{

a1 = 0;//全局

std1::a1 = 11;

std2::a1 = 22;

}

using 声明

有了 using 声明就不需要专门的前缀也能使用所需的名字【只需使用 using 声明声明一次,在之后使用时就不需要使用前缀】

using namespace::name;

每个名字都需要独立的 using 声明

每个 using 声明引用命名空间中的一个成员。

头文件不应包含 using 声明

位于头文件的代码一般不应该使用 using 声明,因为头文件的内容会拷贝到所有引用它的文件中。若头文件中有某个 using 声明,每个使用该头文件的文件都会有这个声明,可能会造成名字冲突。

相关推荐
蒸蒸yyyyzwd3 分钟前
与Redis和MySQL有关的知识
c++·求职招聘·八股
欧特克_Glodon11 分钟前
OpenCV计算机视觉开发入门与实践<四十>:自动识别物体数量
c++·人工智能·opencv·计算机视觉
wuminyu16 分钟前
Kafka利用sendfile与Page Cache实现高性能传输剖析
java·linux·c语言·jvm·c++
hansang_IR17 分钟前
【题解】P4456 [CQOI2018] 交错序列(数学递推)
c++·算法
流浪00119 分钟前
大厂 C/C++ 2023–2025 面试答案题汇总
开发语言·c++
青少儿编程课堂21 分钟前
贪心算法进阶:区间调度与最少资源整合解析
c++·python·算法·贪心·信息学竞赛·区间调度
(Charon)25 分钟前
【C++】 定时器入门:从定时任务到 epoll 驱动
开发语言·c++
励志不掉头发的内向程序员1 小时前
【LibreCAD 2D架构】鼠标点下的坐标为什么会被“吸”走?LibreCAD 对象捕捉系统解析
开发语言·c++·qt·学习·系统架构
Sunsets_Red1 小时前
浅谈扫描线
c++·算法·编程·题解·洛谷·扫描线·信息学竞赛
朝朝辞暮i1 小时前
C++第一课
开发语言·c++·算法