【C++语言】冲突-C语言:命名空间

简介: 【C++语言】冲突-C语言:命名空间

前言

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


1.命名空间:

C语言没有办法解决下图中的命名冲突问题,所以C++提出了namespace关键字来解决

dd2f40c263ed0081b805f80e6da63341_bbbaedad813b43c3bdc3edd0cee5c3d3.png

比如:这里我想定义一个rand变量,但与库中的函数rand重名,C语言里就直接报错,没有办法。那C++有什么办法吗?有的,就是namespace关键字!


namespace关键字

这里我们就直接来展示下:

4ff070dccd6ef4d69beca0defebf5e75_b9191a841c244d989b7a6a1a079a2beb.png

这里就相当于于直接访问了我们设置的空间里的rand,非常准确,避免了和库里的函数rand命名冲突


  • 具体来解释下:我们要先认识这个符号:: 叫做域作用限定符,在这里C::相当于是明确地方:C空间中的rand。
  • 那么我们提出一个问题:我们知道C语言中局部变量和全局变量,优先访问局部,那C++有办法解决吗?
  • 答案是肯定的:如下例子

3a57f5e1083b665edf1f9a1f296d5747_00822afb352d416e87b4aaa51c5a1964.png

  • 这里我们直接在::域作用限定符前为空的,就可以优先访问全局变量。

上面就简单举了两个例子来说明了一下,接下来我们就进一步学习namespace关键字:

1.命名空间中可以定义变量、函数、类型

namespace C
{
  //变量:
  int a = 10;
  
  //函数:
  int Add(int left, int right)
  {
  return left + right;
  }
  
  //类型:结构体
  struct Node
  {
  struct Node* next;
  int val;
  };
}

2.命名空间可以嵌套

namespace C1
{
  //变量:
  int a = 10;
  
  //函数:
  int Add(int left, int right)
  {
  return left + right;
  }
  //嵌套命名空间:
  namespace C2
  {
    int a=20;
  }
}
  • 嵌套命名空间的访问:比如这里我要访问C2的aC1::C2::a

3.相同命名空间共存

在一个工程中,比如在test.cpp和test.h文件中都有N1命名空间,那么会将两个文件的同名空间整合

2 命名空间的使用方式:

1.名称加用域作用限定符的方式访问(同上)

2.使用using引入某个空间中的某个变量

如图,我们用了using引入了C中的b,就可以直接访问量

3.使用using引入展开某个空间

同样可以实现直接访问变量b。

  • 当然这里需要强调一下,直接全部展开会有风险,如果我们定义的命名空间和库里的重名也会报错的。

总结

关于C语言和C++的一些冲突,命名上就是突出的一点,C语言无法解决,所以C++提出方案。

  • 命名空间的介绍,以及namespace关键字的使用
  • 命名空间的三个特点
  • 命名空间的使用方法

C++语言系列学习目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加,添加超链接

目录
打赏
0
0
0
0
4
分享
相关文章
基于 C++ 语言的迪杰斯特拉算法在局域网计算机管理中的应用剖析
在局域网计算机管理中,迪杰斯特拉算法用于优化网络路径、分配资源和定位故障节点,确保高效稳定的网络环境。该算法通过计算最短路径,提升数据传输速率与稳定性,实现负载均衡并快速排除故障。C++代码示例展示了其在网络模拟中的应用,为企业信息化建设提供有力支持。
117 15
企业员工数据泄露防范策略:基于 C++ 语言的布隆过滤器算法剖析[如何防止员工泄密]
企业运营过程中,防范员工泄密是信息安全领域的核心议题。员工泄密可能致使企业核心数据、商业机密等关键资产的流失,进而给企业造成严重损失。为应对这一挑战,借助恰当的数据结构与算法成为强化信息防护的有效路径。本文专注于 C++ 语言中的布隆过滤器算法,深入探究其在防范员工泄密场景中的应用。
76 8
|
5月前
|
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
141 20
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
86 0
[oeasy]python052_[系统开发语言为什么默认是c语言
本文介绍了C语言为何成为系统开发的首选语言,从其诞生背景、发展历史及特点进行阐述。C语言源于贝尔实验室,与Unix操作系统相互促进,因其简洁、高效、跨平台等特性,逐渐成为主流。文章还提及了C语言的学习资料及其对编程文化的影响。
64 5
【C语言】C++ 和 C 的优缺点是什么?
C 和 C++ 是两种强大的编程语言,各有其优缺点。C 语言以其高效性、底层控制和简洁性广泛应用于系统编程和嵌入式系统。C++ 在 C 语言的基础上引入了面向对象编程、模板编程和丰富的标准库,使其适合开发大型、复杂的软件系统。 在选择使用 C 还是 C++ 时,开发者需要根据项目的需求、语言的特性以及团队的技术栈来做出决策。无论是 C 语言还是 C++,了解其优缺点和适用场景能够帮助开发者在实际开发中做出更明智的选择,从而更好地应对挑战,实现项目目标。
279 0
|
9月前
|
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
207 5
深入计算机语言之C++:类与对象(上)
深入计算机语言之C++:类与对象(上)
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
43 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问