C++入门之命名空间详解

news2025/1/16 18:42:14

一、为什么要使用命名空间

命名空间的功能就是区分不同的代码段,避免使用不同代码时带来变量名冲突的问题

在写C语言代码时,常常回面临命名冲突的问题。例如: 

可以成功运行。

但是如果要使用 time.h 头文件时,就会与库发生冲突 

还有在包其他同学写的头文件时,也有会发生命名冲突的可能。 

为了解决这一问题,C++引入了命名空间,把自己写的代码放进命名空间中,就能解决这一问题。

 

 我们可以看到,上面显示重定义的错误在给我们自己定义的变量加上命名空间后就消失了

程序运行后就打印出来了clock这个函数指针的值

1、其中,namespace 就是定义命名空间的关键字,后面跟着你的命名空间的名字,再用大括号括起来,大括号里面就是你的命名空间了。

2、命名空间就像是一堵无形的墙,把里面的代码和外面的隔开了,所以编译器只能找到库里面的clock

 3、要注意的是,命名空间不能和别人或者库里的发生冲突,不然也会报错的。如下:

 二、域作用限定符

1、那我们命名空间里的变量在外面如何使用呢?

就是用域作用限定符  :: (两个冒号)

命名空间名字::变量名    就可以使用了。 

 2、如果命名空间里面还有一个命名空间怎么使用最里面的命名空间?

命名空间是可以嵌套的,

使用里面命名空间的方法就是 外命名空间名字::里命名空间名字::变量名

三、同名空间会合并

 在同一个文件或不同文件中定义的同名命名空间会合并。

 我们在写代码时,经常要写一个头文件,一个.c 或.cpp 文件。

此时可以在头文件和.c 或.cpp 文件中定义一个同名命名空间,这样就可以声明与定义分离。

四、展开命名空间() 

相信大家在写 cpp 代码时经常会写 using namespace std;

这句话的意思就是展开命名空间std

展开命名空间就是把命名空间里的代码全部暴露出来本来变量只在全局变量中找,展开命名空间后也会去命名空间里面查找。     

展开命名空间的方法就是用using namespace 命名空间名字 来展开命名空间

 

 1、展开命名空间后可以指定也可以不指定,指定命名空间后就会只会去指定的空间查找

       不指定命名空间就会在全局以及展开的命名空间中查找

2、可以展开多个命名空间

3、不推荐在写项目时展开命名空间,因为我们使用命名空间就是为了封装起来,现在又展开显得多此一举,而且展开命名空间很有可能会在使用时发生冲突,如上。

五、指定展开 

 展开命名空间会有风险,而一直用域作用限定符又很累,此时就可以使用我们的指定展开

如:当我们再写常用的如:cout 、cin、endl等等时,一直写std::cout, std::cout....很不方便时

就可以采用指定展开,用法:using 命名空间名字::变量名;

例如:using std::cout;

 此时会报错

 指定展开后,成功运行

推荐使用指定展开,这样既可以避免风险,也能让我们更轻松。

 感谢大家观看!

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

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

相关文章

C++primer 第二章 变量和基本类型

昨天思考了一下,感觉明白了。于是报名了软考,还有挑战z杯,想着四级还要不要报,毕竟我也不是有天赋的人,就只能努力去做个努力的人。加油!!! 不知道未来怎么样,那就走好现在吧!!&…

Tableau:商业智能(BI)工具

Tableau入门 1、Tableau概述2、Tableau DesktopTableau保存文件类型和文件夹 1、Tableau概述 Tableau 成立于 2003 年,Tableau于2019年被 Salesforce 收购,是斯坦福大学一个计算机科学项目的成果,该项目旨在改善分析流程并让人们能够通过可视…

重新定义公共厕所,智慧公厕最新解决方案与推广路径

随着科技的进步,现代城市管理的智慧化解决方案在不断挑战传统的管理方式,而在智慧城市领域有一个热点的物联网应用解决方案——智慧公厕。智慧公厕不仅仅是公共厕所的升级版,它也是城市文明,高效,环保和科技的体现。本…

echarts实现圆柱体 渐变柱体

const weatherIcons [ { lable: ‘寿险’, id: 2, img: require(/assets/images/customerModule/title-action.png) }, { lable: ‘重疾’, id: 3, img: require(/assets/images/customerModule/title-action.png) }, { lable: ‘医疗’, id: 4, img: require(/assets/images/…

区块链跨链技术

区块链跨链技术 背景 近年来,随着区块链技术的不断发展,区块链的应用场景逐渐从最初的加密货币领域扩展到金融、物流、医疗、公共服务等各个领域。随着区块链的应用场景不断增多,区块链的“数据孤岛”问题日益突出,不同场景下的…

yolov8剪枝实践

本文使用的剪枝库是torch-pruning ,实验了该库的三个剪枝算法GroupNormPruner、BNScalePruner和GrowingRegPruner。 安装使用 安装依赖库 pip install torch-pruning 把 https://github.com/VainF/Torch-Pruning/blob/master/examples/yolov8/yolov8_pruning.py&…

Mac系统清理工具BuhoCleaner

BuhoCleaner是一款在Mac电脑上运行的清洁软件。它的界面简洁,易于使用,能够快速扫描Mac电脑上的垃圾文件、重复文件、大型文件等,帮助用户清理不需要的文件,释放磁盘空间。 该软件的主要功能包括: 垃圾文件清理&…

哈希桶封装unordered set和map

目录 进一步实现哈希桶 引入 keyofValue 迭代器 insert返回值 operator[ ] key不能修改 模拟实现 keyofValue 代码 迭代器 谁在前 普通迭代器转换为const迭代器 const *this 问题 代码 insert和erase const迭代器转换为普通迭代器 key不能修改 完整版代码 …

前端axios发送请求,在请求头添加参数

1.在封装接口传参时,定义形参,params是正常传参,name则是我想要在请求头传参 export function getCurlList (params, name) {return request({url: ********,method: get,params,name}) } 2.接口调用 const res await getCurlList(params,…

电力智能运维管理平台:提升电力行业运营效率与安全

随着电力行业的不断发展,电力系统的运维管理逐渐成为关注的焦点。如何在保证供电稳定的同时,提高运营效率,降低运营成本,是电力行业面临的挑战。电力智能运维管理平台,正是在这一背景下应运而生的一种解决方案。 力…

insightface的预训练权重buffalo_sc.zip下载

想要下载 https://github.com/deepinsight/insightface里的权重找了半天,网络时而卡掉,所以分享 一下终于下载好了,存在百度网盘里,分享给大家。 链接:https://pan.baidu.com/s/1PKp3pPzFg8hrbqACUfHO2A?pwdamtf 提…

数据转换为excel模板下载

一、引入依赖 <dependency><groupId>org.jxls</groupId><artifactId>jxls-poi</artifactId><version>2.12.0</version></dependency> 二、准备解析的数据封装 package com.dst.modules.business.after.sale.parts.sparepa…

Java学习复杂的对象数组操作

Java学习复杂的对象数组操作 定义一个长度为3的数组&#xff0c;数组存储1~3名学生对象作为初始数据&#xff0c;学生对象的学号&#xff0c;姓名各不相同。 学生的属性&#xff1a;学号&#xff0c;姓名&#xff0c;年龄。 要求1&#xff1a;再次添加一个学生对象&#xff0…

什么是React的虚拟DOM(Virtual DOM)?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

nginx服务---2

如何统计连接数&#xff0c;以及根据域名配置虚拟主机 cd /usr/local/nginx/conf vim nginx.conf server {listen 80;server_name www.abc.com;charset utf-8;access_log logs/www.abc.com;error_log logs/www.abc.error.log;location / {root /var/www/html/zzr;in…

Pytorvh之Vision Transformer图像分类

文章目录 前言一、Transformer1.Transformer概览2.Self-Attention3.Multi-head Attention4.Position-wise Feed-Forward Networks(位置前馈网络)5.残差连接和层归一化6.Positional Encodings(位置编码) 二、Vision Transformer1.Vision Transformer概览2.Embedding层结构&#…

DetailView/货币详情页 的实现

1. 创建货币详情数据模型类 CoinDetailModel.swift import Foundation// JSON Data /*URL:https://api.coingecko.com/api/v3/coins/bitcoin?localizationfalse&tickersfalse&market_datafalse&community_datafalse&developer_datafalse&sparklinefalseR…

滚珠螺母在工业机器人中的应用优势

工业机器人是广泛用于工业领域的多关节机械手或多自由度的机器装置&#xff0c;具有一定的自动性&#xff0c;可依靠自身的动力能源和控制能力实现各种工业加工制造功能。滚珠螺母作为工业机器人中的重要传动配件&#xff0c;在工业机器人的应用中有哪些优势呢&#xff1f; 1、…

华为云云耀云服务器L实例评测 | 实例评测使用之硬件参数评测:华为云云耀云服务器下的监控 glances

华为云云耀云服务器L实例评测 &#xff5c; 实例评测使用之硬件参数评测&#xff1a;华为云云耀云服务器下的监控 glances 介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什么华为云云耀…

【操作系统】信号量机制及PV操作问题总结

【操作系统】信号量机制及PV操作问题总结 文章目录 【操作系统】信号量机制及PV操作问题总结题型分类解题的基本思路1、前置知识 &#xff08;信号量机制&#xff09;&#xff08;1&#xff09;整型信号量&#xff08;2&#xff09;记录型信号量&#xff08;3&#xff09;信号量…