C++命名空间

在C/C++中,变量,函数和和类这些名称都存在于全局作用域中,可能会导致很多冲突,使用命名空间的目的是对标识符的名称进行本地化,避免命名冲突或名字污染,namespace关键字就是解决这种问题的。如下程序并无问题:

#include<stdio.h>
int rand=0;
int main(){printf("%d\n",rand);return 0;
}

但是如果在上述代码中加入一段#include<stdlib.h>,因为stdlib.h头文件里面有一个rand的函数,此时就会出现如下错误:

命名冲突(C语言中没有方法可以解决这个问题):

1.我们写的代码跟库冲突

2.我们互相之间写的代码冲突

这时C++中就有了namespace用来定义一个命名空间,语法:namespace 命名空间名{成员},示例如下:

#include<stdio.h>
#include<stdlib.h>
namespace ThisLocality{int rand = 0;
}int main() {printf("%d\n", rand);
}

这时就解决命名冲突这个问题,命名空间就像一堵墙把rand围起来了,此时的rand默认访问的是全局就是stdlib.h头文件里面的函数rand,而namespace里的rand就不会被访问了,既然是访问函数rand那么就用%p来打印地址,此时代码运行如下:

此时想访问namespace里面rand,只需要在rand前面加,命名空间名::(域作用限定符)变量名就可以了,示例代码如下:

#include<stdio.h>
#include<stdlib.h>
namespace ThisLocality{int rand = 0;
}
int main() {printf("%p\n", rand);//访问的是stdlib.h头文件里面的函数printf("%d\n", ThisLocality::rand);//此时访问的是bit命名空间里的rand变量
}

此外,命名空间除了可以定义变量也可以定义函数,结构体,还可以嵌套,代码如下:

namespace ThisLocality{//定义变量int rand=10;//定义函数int Add(int left,int right){return left+right;}//定义结构体struct Node{struct Node*next;int val;};//嵌套namespace ThisLocality2{int rand=100;}}

上述几种定义的访问方式如下图:

上述中函数和变量的访问方式只不过就是在名字后面加了()里面放对应的参数,而定义命名空间中的结构体的时候命名空间名是加在结构体名前面的所以是ThisLocality::Node 结构体变量名,最后访问int rand=10;首先要找到命名空间ThisLocality然后再::命名空间名,这是找命名空间里的命名空间最后就到了这个命名空间里了,最后::变量名就可以访问了,我们知道嵌套如果太深也不好一般来说两层基本就够了。

下面在Stack.h中定义了ThisLocality然后在Stack.cpp中完成的ThisLocality里面函数的内容,因为他们是同名所以会自动合并成一个命名空间,所以在Test.cpp中导入Stack.h就可以使用ThisLocality中的函数了。

 展开命名空间,使用展开命名空间就像把命名空间里面的代码直接放到展开位置上了,使用了展开命名空间之后就不需要再使用,命名空间::这段了可以直接使用里面的变量或者函数跟普通变量使用方法并无区别。

using namespace 命名空间名;

展开示例:

可以看到展开之后不需要加,命名空间名::,如其中的ST它会先去全局中找没找到就会去声明的命名空间里面找,如果在这两个地方都没有找到就会报错,但是不建议大量使用这种方法。

我们经常会在很多C++的代码中看到:using namespace std;这段代码,这段代码其实是C++官方库里面的命名空间,这里是直接把这个库展开了,这样就可以随便用里面的东西了。C++把东西放在里面,就是因为容易发生冲突,如果展开那不是本末倒置了,但是日常小程序为了方便可以这样做。

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

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

相关文章

文物保护平台数据统计分析及预警-子系统专题分析

文物预防性监测与调控系统的监测统计分析子系统提供全面的文物状态及环境数据分析,为博物馆工作人员进行基于文物材质特性的专项保护提供相关科研辅助。主要的监测分析,包括各展厅文物统计分析、不同环境因素报表统计、以及监测调控设备统计分析等。 系统用户和文物管理人员可以…

从0开始入门智能知识库和星火大模型,打造AI客服。

介绍FastWiki FastWiki是一个高性能、基于最新技术栈的知识库系统&#xff0c;旨在为大规模信息检索和智能搜索提供解决方案。它采用微软Semantic Kernel进行深度学习和自然语言处理&#xff0c;在后端使用MasaFramework&#xff0c;前端采用MasaBlazor框架&#xff0c;实现了…

Swing程序设计(11)动作事件监听器,焦点事件监听器

文章目录 前言一、事件监听器是什么&#xff1f;二、详细展开 1.动作事件监听器2.焦点事件监听器总结 前言 如果你是坚持从Swing程序第一篇看到了这里&#xff0c;恭喜你&#xff0c;Swing程序设计简单地落下了帷幕&#xff0c;关于Swing程序更深的了解&#xff0c;可以自行学习…

MySQL性能优化-范式设计和反范式设计

范式化设计 范式化设计背景 范式是数据表设计的基本原则&#xff0c;又很容易被忽略。很多时候&#xff0c;当数据库运行了一段时间之后&#xff0c;我们才发现数据表设计得有问题。重新调整数据表的结构&#xff0c;就需要做数据迁移&#xff0c;还有可能影响程序的业务逻辑…

【Axure高保真原型】输入宽高控制图片尺寸

今天和大家分享输入图片宽高控制图片尺寸的原型模板&#xff0c;在输入框里输入图片的宽和高&#xff0c;图片会自动设置成对应数值的尺寸&#xff0c;包括了按比例或者自由设置两种方式&#xff0c;具体效果可以观看下方视频或者打开预览地址体验。 【原型效果】 【Axure高保…

数据库SQLite

1.简单创建一个数据库和删除一个数据库 <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:orientation"vertical">&l…

wordpress外贸独立站

WordPress外贸电商主题 简洁实用的wordpress外贸电商主题&#xff0c;适合做外贸跨境的电商公司官网使用。 https://www.jianzhanpress.com/?p5025 华强北面3C数码WordPress外贸模板 电脑周边、3C数码产品行业的官方网站使用&#xff0c;用WordPress外贸模板快速搭建外贸网…

Windows Media Player (Win10)

Windows Media Player &#xff08;Win10&#xff09;服务器运行失败 先关闭掉【Windows Media Player】组件&#xff0c;但是要重启计算机 重启计算机后&#xff0c;再开启【Windows Media Player】组件√起来 可以使用了&#xff01;&#xff01;&#xff01;

前缀和和差分以及练习题目

蓝桥杯备赛系列 倒计时50天&#xff01; 前缀和和差分 知识点 前缀和数组&#xff1a; 假设原数组用a[i]表示&#xff0c;前缀和数组用sum[i]表示&#xff0c;那么sum[i]表示的是原数组前i项之和&#xff0c;注意一般用前缀和数组时&#xff0c;原数组a[i]的有效下标是从1开…

最强照片AI无损放大工具

使用人工智能的能力来放大图像&#xff0c;同时为惊人的结果添加自然的细节。 使用深度学习技术&#xff0c;A.I.GigaPixEL可以放大图像并填满其他调整大小的产品所遗漏的细节。 下载地址&#xff1a;最强照片AI无损放大工具.zip

太阳能供电井盖-物联网智能井盖监测系统-旭华智能

在这个日新月异的科技时代&#xff0c;城市的每一个角落都在悄然发生变化。而在这场城市升级的浪潮中&#xff0c;智能井盖以其前瞻性的科技应用和卓越的安全性能&#xff0c;正悄然崭露头角&#xff0c;变身马路上的智能“眼睛”&#xff0c;守护城市安全。 传统的井盖监测系统…

展示模型展台的高度一般为多少---模大狮模型网

展示模型展台的高度一般取决于多个因素&#xff0c;包括展示物品的大小、展台的设计风格、展览场地的限制等。一般来说&#xff0c;展示模型展台的高度可以根据以下几点考虑&#xff1a; 展示物品的大小&#xff1a;如果展示物品比较大或需要竖立展示&#xff0c;展台的高度可能…

【学位论文】上海交通大学 研究生学位论文 本地保存

上海交大研究生学位论文网&#xff1a;http://thesis.lib.sjtu.edu.cn/ &#xff08;只能校内访问或SJTU VPN访问&#xff09; 如果希望下载论文&#xff0c;需要参考&#xff1a;https://github.com/olixu/SJTU_Thesis_Crawler 安装过程 安装过程的几个坑&#xff1a; &a…

【Redis】RedisTemplate和StringRedisTemplate的区别

两者的关系是 StringRedisTemplate 继承 RedisTemplate 。 两者的数据是不共通的&#xff1a;也就是说 StringRedisTemplate 只能管理 StringRedisTemplate 里面的数据&#xff0c;RedisTemplate 只能管理 RedisTemplate 中的数据。 RedisTemplate 看这个类的名字后缀是 Temp…

Cesium实战三:飞行航线动画

飞行航线追踪 可视化从旧金山到哥本哈根的真实航班。 1、获取点位数据&#xff1a;构建飞行跟踪器 – Cesium (cesium.com) 2、在地图上添加飞行点位&#xff1a;循环遍历点位数据&#xff0c;利用Entity直接添加点至地图上。 //添加飞行点位 const addFlightPoint () >…

彻底搞懂CPU特权级

程序员在用户程序开发过程中,会遇到两个基本概念即用户态和内核态&#xff0c;我们所说的模式切换&#xff0c;就是用户态和内核态之间的切换。 用户态和内核态其实是CPU的特权级&#xff0c;所以模式的切换就是CPU特权级的切换&#xff0c;模式等同于特权级&#xff0c;不同的…

Cesium 问题:[Violation]‘requestAnimationFrame‘ handler took 58ms

文章目录 问题分析解决问题 Cesium 在引入页面后,控制台弹出提示信息: [Violation]requestAnimationFrame handler took 58ms分析 这个警告信息表明使用 requestAnimationFrame 方法时,其处理函数执行所需的时间超过了一定阈值,从而触发了警告。requestAnimationFrame 方…

Java+SpringBoot:制造企业质量管理的双引擎

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

mysql高可用架构设计

一、主从架构 主从架构一般如下所示 这里从节点一般设置成只读&#xff08;readonly&#xff09;模式。这样做&#xff0c;有以下几个考虑&#xff1a; 有时候一些运营类的查询语句会被放到备库上去查&#xff0c;设置为只读可以防止误操作&#xff1b; 防止切换逻辑有 bug&a…

Linux——进程池

Linux——进程池 池化技术进程池信道模拟任务进程退出一个bug 今天我们来学习一下管道的应用——进程池。如果有没看过上一篇管道的小伙伴可以点击这里&#xff1a; https://blog.csdn.net/qq_67693066/article/details/136371517 池化技术 我们首先要了解一下池化技术&#x…