C++篇 ---- 命名空间namespace

news2024/11/18 12:24:49

由于在c语言中在定义时可能会出现重命名现象,造成空间冲突,c语言中有命名冲突:1 和库冲突。2 互相之间的冲突,变量命名冲突。所以c++中就有了对其改进的关键字namespace,针对重定义,解决空间冲突。

文章目录

  • 命名空间namespace


命名空间namespace

以下是c语言实现的代码

#include<stdio.h>
#include<stdlib.h>

int rand = 1;

int main()
{
	printf("%d\n", rand);
	return 0;
}

在这里插入图片描述
这里会报错是由于变量rand与库函数中的rand相同,导致了命名冲突

如何解决命名冲突?

使用namespace。

此时修改rand的域,用域对rand进行隔离,同一个域中不能定义相同变量,因此将其隔离到其它域中

  • 类域
  • 命名空间域
  • 局部域
  • 全局域

而此时要将其修改到命名空间域中去。

当一个程序中一个变量在局部和全局并且命名空间都有创建时,编译器优先搜索访问的是局部,再全局如果命名空间域展开(展开命名空间是指编译器是否会到命名空间搜索) 的话再命名空间,否则是不会搜索访问命名空间的

展开命名空间(using naespace std):

  1. 命名空间直接展开有风险,定义和库重合会报错
  2. 建议项目中不要去展开,在我们日常用的时候展开没什么大问题
  3. 推荐指定访问,指定展开c++常用的,如 using namespace cout,using namespace cin,using namespace endl
//全局域
int a = 1;

//命名空间域
namespace zzm
{
	int a = 2;
}


int main()
{
	//局部域
	int a = 0;
	printf("%d\n", a);
	return 0;
}

在这里插入图片描述

无局部时
在这里插入图片描述
当变量只在命名空间域有定义时
在这里插入图片描述

此时并没有将命名空间展开using或者加域作用限定符::,就相当于编译器不知道这个命名空间,所以也就搜索不到变量a,而此时可以加域作用限定符或者展开命名空间

在这里插入图片描述
在这里插入图片描述

是指在这个命名空间里去搜索找变量a,zzm::指定到命名空间zzm中搜索,其左边zzm的为命名空间的名字,

如果左边的为空白 :: 就表示在全局域去搜索查找

在这里插入图片描述

其实在编译器中它在定义或者使用时会向前面查找,搜索是否有相同或者存在,而在搜索时又先从局部域开始,局部域没有全局域,如果都没有是不会默认到命名空间域搜索的,只有将其展开using或者使用域限定符::指定访问命名空间域

namespace zzm
{
	int a = 2;
}

using namespace zzm;

int main()
{
	//局部域
	//int a = 0;//将局部屏蔽
	printf("%d\n", a);
	return 0;
}

在这里插入图片描述

但是将其命名空间展开之后有不可与全局同时用,因为此时编译器并不确定是命名空间域的还是全局域的

在这里插入图片描述

不展开:相同变量在不同域中可以同时存在,只是需要使用域限定符搜索指定命名空间
命名空间展开:也就将封在命名空间里面的内容暴露在全局域了,就如上面,此时编译器也不确定访问谁
在这里插入图片描述

而由开始引出的变量命名与库中相同时,也就有了解决方法。将这个变量定义到命名空间域中,直接在命名空间搜索访问

#include<stdio.h>
#include<stdlib.h>

namespace lsy
{
	int rand = 1;
}

int main()
{
	printf("%d\n", lsy::rand);
	return 0;
}

在这里插入图片描述
此时也就解决了命名冲突问题了。

命名空间里面不仅仅可以定义变量还可以定义函数,结构体任意类型。且也可以嵌套命名空间

namespace n1
{
    int a = 0;
    int b;
    int Add(int left, int right)
    {
        return left + right;
    }

    namespace n2
    {
        int a = 1;
        int c;
        int d;
        int Sub(int left, int right)
        {
            return left - right;
        }
    }
}

int main()
{
    printf("%d\n", n1::a);
    printf("%d\n", n1::n2::a);//不过嵌套在搜索时先搜索外边的然后再搜索里面嵌套的
    //就像盒子都要先打开外边的叭
    printf("%d\n", n1::Add(1, 2));
    //
    return 0;
}

在这里插入图片描述

而c++的库和stl都封在一个命名空间std中,c++库中的东西都在std中,像cout,cin,endl啊这些常见的都是命名空间std中的


可以说namespace是解决c语言的命名冲突而出现的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/419372.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

总结820

学习目标&#xff1a; 4月&#xff08;复习完高数18讲内容&#xff0c;背诵21篇短文&#xff0c;熟词僻义300词基础词&#xff09; 学习内容&#xff1a; 高等数学&#xff1a;巩固所学&#xff0c;1~10讲内容回顾 rule No.1:never lost your knowledge. rule No.2:never f…

C++基础语法(模板)

C的模板是什么&#xff1f;有什么用&#xff1f;如果你想知道问题的答案&#xff0c;那么看这篇博客就对了&#xff0c;在这篇博客中&#xff0c;我们将探讨泛型编程&#xff0c;C模板的具体内容 目录 模板概念 函数模板 显示实例化与隐式实例化 模板不支持声明和定义分离 类模…

104.(cesium篇)cesium卫星轨道模拟

听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <html lang="en"> <

【数据结构】带你细致理解八大排序

文章目录前言一.冒泡排序前一个数跟后一个数比较后一个数跟前一个数比较优化复杂度与稳定性二.插入排序初始化条件从第一个元素开始初始化条件从第二个元素开始复杂度与稳定性三.选择排序一趟选出一个最小的一趟选出一个最大的和一个最小的复杂度与稳定性四.堆排序建堆用向下调…

数据结构入门(C语言版)栈和队列之栈的介绍及实现

栈栈的概念栈的实现过程栈的结构体与接口的定义1、静态栈结构2、动态栈结构3、栈的接口定义栈的接口实现①初始化栈(StackInit)②入栈(StackPush)③出栈(StackPop)④栈顶(StackTop)⑤栈元素个数(StackSize)⑥检测栈是否为空(StackEmpty)⑦销毁栈(StackDestroy)结语栈的概念 栈…

【EXata】在 Visual Studio 2010 上编译与调试 EXata

一、在 VS2010 中编译 Exata 通过命令行的形式来编译调试 EXata 的方式太过麻烦&#xff0c;一次两次还好&#xff0c;时间长了慢慢就烦了&#xff0c;于是想着有没有什么方法能够简化这些操作&#xff0c;翻看手册&#xff0c;发现是可以在 IDE 中进行编译&#xff0c;于是就有…

mysql分库分表分片分区及常见问题

1.前言 MySQL单库数据量在5000万以内性能比较好&#xff0c;超过阈值后性能会随着数据量的增大而变弱。MySQL单表的数据量是500w-1000w之间性能比较好&#xff0c;超过1000w性能也会下降。 2.mysql分布式 分库 分库一般有两种目的&#xff1a;将库中不同表进行拆分&#xff…

英国访问学者T5签证所需相关材料

英国访问学者T5签证所需相关材料,下面就随知识人网小编一起来看一看。 1、完整填写的申请表格并亲笔签名。 2、近期护照规格白色背景彩色照片并贴在签证表格首页右上角。 3、签证后至少剩余6个月有效期的护照及申请人所持有的旧护照。 4、邀请信原件。 邀请信主要内容包括&…

基于SSM框架便利店管理系统(进销存管理系统)(java+spring+springmvc+mybatis+maven+mysql+html)

一、项目简介 本项目是一套基于SSM框架便利店管理系统(进销存管理系统)&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等&#xff0c;该项目附带全部源码可作为毕设使用。…

BT8918D---huart模块分析

1 huart模块 huart模块从名字可以看出&#xff0c;用于串口UART通讯&#xff0c;H的含义&#xff0c;目前还不知道&#xff0c;待了解。该模块源码未公开&#xff0c;已经编译成库文件&#xff0c;供开发者使用。 2 huart模块分析 2.1 特性 默认特性&#xff1a; Baud rat…

R语言处理数据——janitor包的介绍及使用

janitor功能介绍 janitor可以检查并清理脏数据&#xff0c;适用于R语言用户。主要功能如下&#xff1a; 1、完美格式化数据框的列名&#xff1b; 2、创建并格式化1-3个变量的频率表&#xff0c;可以看作是一个改进的table()函数&#xff1b; 3、提供用于清理和检查数据框的其他…

CCS通过dat文件导入数据计算出结果再导出数据

之前有很多博主讲过在matlab当中导出数据&#xff0c;到DSP里面进行计算&#xff0c;然后再将数据导出到matlab当中进行使用。 以前使用过matlab当中的dat数据&#xff0c;大家可以看一下区别&#xff1a; fid fopen(A.dat,wt);%将所得的数据存在A.dat当中 fprintf(fid,%g\n…

Hadoop配置

静态IP vi /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTOstatic ONBOOTyes IPADDR192.168.10.11 NETMASK255.255.255.0 GATEWAY192.168.138.2 DNS1114.114.114.114 DNS28.8.8.8 重启网络服务 service network restart 修改主机名 hostnamectl set-hostname ‘hadoop…

【Vue】学习笔记03-数据绑定

学习笔记03-数据绑定v-bind 单向绑定v-model 双向绑定错误案例&#xff1a;简写总结v-bind 单向绑定 <!--准备好一个容器--><div id"root">单向数据绑定&#xff1a;<input type"text" v-bind:value"name"></div><…

C++ 实现 matlab 的 buttap 函数

文章目录1. matlab buttap 函数的功能2. matlab buttap 函数的使用方法3. C实现4. 测试1. matlab buttap 函数的功能 输入模拟低通巴特沃斯滤波器的最低阶数&#xff0c;输出对应模拟低通巴特沃斯滤波器的传递函数的零点、极点、增益 其中&#xff0c;零点都为0&#xff0c;增…

详解 OSPF 协议

今天海翎光电的小编和大家聊一聊 OSPF 协议。 OSPF 是一种基于 SPF 算法的链路状态路由协议。 上图是在一个 OSPF 区域里面添入一台新的路由器的时候&#xff0c;OSPF 协议的工作过程&#xff0c;如果你能非常详细的叙述出这张图的话&#xff0c;基本上 OSPF 协议的工作过程你…

Hadoop 开启 histotryserver

Hadoop 开启 histotryserver Hadoop自带了一个历史服务&#xff0c;可以通过历史服务在web端查看已经运行完的Mapreduce作业记录&#xff0c; 默认情况下&#xff0c;Hadoop历史服务是没有启动的&#xff0c;需要自行启动。 启动后&#xff0c;在下图中点击history可跳转至历史…

论文阅读 —— Graph Self-Supervised Learning: A Survey (自监督图学习综述)

论文链接&#xff1a;https://arxiv.org/pdf/2103.00111.pdf 目录 摘要 1 引言 2 定义和符号&#xff08;notation&#xff09; 2.1 术语定义 2.2 符号 3 框架和分类 3.1 图自监督学习的统一框架和数学公式 3.2 图自监督学习的分类 3.3自我监督训练计划的分类 3.4 下游…

【通过Cpython3.9源码看看字典到底是咋回事】

字典结构 /* The ma_values pointer is NULL for a combined table* or points to an array of PyObject* for a split table*/ typedef struct {PyObject_HEAD/* Number of items in the dictionary */Py_ssize_t ma_used;/* Dictionary version: globally unique, value cha…

更灵敏、更精准、更智能,机器人避障也能“随心所欲”

对于穿梭在人群中的机器人们而言&#xff0c;避障的重要性不言而喻。 随着机器人应用越来越广泛&#xff0c;机器人的作业场景的复杂度在显著增加&#xff0c;与人类的接触也越加密集&#xff0c;这对机器人的避障功能提出了新要求&#xff0c;不仅要更加精准灵敏&#xff0c;还…