【C++课程学习】:命名空间的理解(图文详解)
🎁个人主页:我们的五年
🔍系列专栏:C++课程学习
🎉欢迎大家点赞👍评论📝收藏⭐文章


目录
📷1.命名冲突
📷2.重定义
📷3.命名空间
🍺命名空间可以嵌套:
🍺可以定义一样名字的命名空间
🍺命名空间的两种展开方式:
前言:
已经学了几天的C++,现在来把知识点梳理一下。C++和C语言差别很大,在很多方面比C语言做的更好,所以我再次感谢C++之父本贾尼博士。然后今天现来看看他在C语言上改善的一个小点。
📷1.命名冲突
本贾尼博士在用C语言的时候,可能就遇到这样的问题。他与几个同事一起写一个大型的程序,然后他们把这大型的程序分成几个部分,每个人完成一部分,然后再把代码放在一起,进行运行。结果就报错了,这里面可能有一点就是他们几个人都定义了一样的变量,这样编译器就找不到要用哪个变量。或者定义了很多函数,但是有两个人的函数名字是一样的,这样又会发生错误。所以他们就只能去改名字。这样其实也是很麻烦的,所以本贾尼博士就在C++中引入了一个新的概念:命名空间。
📷2.重定义
正常去查找变量的顺序是:
1.先在所在的局部域进行查找。
2.在全局域进行查找。
注意:在没有展开指定域的情况下,是不去该域查找的。




理解:
1.打印rand的时候,先在局部域中查找rand,然后就找到了,就输出100,这没问题。
2.打印rand的时候,在局部域找了一下,没有找到,然后又去局部域找,然后也找到了,这也没问题。
3.引入rand函数的头文件:include<stdlib.h>以后,把rand放在局部,然后运行没什么问题,还是能找到,也没有重定义。
4.当引入rand函数的头文件,全局域本来就有一个rand函数,然后又把rand变量定义在全局。这样编译器就不知道找哪个了。
🌹🌹🌹下面的这个代码也就证明了,没有其他操作情况下,编译器是不会去命名空间里找的。
要想让编译器去命名空间里找,这里有两种方法:
1.在a前面加上所在的命名空间。
2.展开a所在的命名空间。using namespace 命名空间名;

我刚刚在试的时候,就把using namespace ku;放在了命名空间的前面,就编不过去,害我找了几分钟,才知道的要把using namespace ku;放在命名空间的前面。所以老铁们,注意一下。


📷3.命名空间
从上面的例子我就已经看到命名空间了:
#include<iostream>//ku是命名空间的名字
namespace ku {int a = 100;
}int main()
{//前面的是在std域中找cont//后面的是在ku域中找astd::cout << ku::a ;return 0;
}
🍺命名空间可以嵌套:
查找的时候就去一个一个域中找,如下:
展开命名空间如下:
using namespace A::B;
#include<iostream>//A命名空间里嵌套有B命名空间
namespace A {namespace B {int k = 0;}
}int main()
{//A::B::k查找k的结构std::cout << A::B::k ;return 0;
}
🍺可以定义一样名字的命名空间
当定义同样的命名空间,编译器会把名字一样的命名空间进行合并。
#include<iostream>//编译器会合并这两个命名空间
namespace A {int p = 88;
}namespace A {int a=99;
}
using namespace A;
int main()
{std::cout << A::a << " " << A::p<<std::endl;return 0;
}
🍺命名空间的两种展开方式:
1.全展开:
using namespace std;就是展开std命名空间里的所以东西,包括cout,cin,endl2.部分展开:
using std::cout;就是只展开std里面的cout。
注意:全展开会有很多命名已经存在,不太适合用在项目里面,在平时练习的时候还是可以用的。
#include<iostream>
using namespace std;int main()
{cout << "Hello World" << endl;return 0;
}
#include<iostream>
using std::cout;//只展开std里面的coutint main()
{cout << "Hello World";return 0;
}

注意点:
1.有了命名空间,就算有很多个重复的变量名,函数名,都是没关系的,只要这些在不同的域中间。所以我们写项目的时候,每个人都定义一个自己的命名空间,这样就不会出现命名重复的问题了。
2.命名空间的定义是全局的。
3.域解析操作符(::)。
4.命名空间可以定义函数/变量/类型。
相关文章:
【C++课程学习】:命名空间的理解(图文详解)
🎁个人主页:我们的五年 🔍系列专栏:C课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 📷1.命名冲突 📷2.重定义 📷3.命名空间 🍺命名空间可…...
鸿蒙ArkUI-X平台差异化:【运行态差异化(@ohos.deviceInfo)】
平台差异化 简介 跨平台使用场景是一套ArkTS代码运行在多个终端设备上,如Android、iOS、OpenHarmony(含基于OpenHarmony发行的商业版,如HarmonyOS Next)。当不同平台业务逻辑不同,或使用了不支持跨平台的API…...
蓝牙Mesh模块组网时无线回程影响速率吗?
随着科技的发展,智能家居、智能办公等场景越来越广泛地应用于我们的生活。其中,蓝牙Mesh组网技术作为一种新型的无线通信技术,受到了越来越多用户的关注。那么,蓝牙Mesh模块在组网时无线回程过程中是否会影响速率呢?本…...
将3D检测的box框投影到BEV图片上
前言 点云数据作为一种丰富的三维空间信息表达方式,通常用于自动驾驶、机器人导航和三维建模等领域。然而,点云数据的直观性不如二维图像,这限制了它在一些需要快速视觉反馈的应用场景中的使用。本文将探讨如何将点云数据转换为二维图像&…...
Flutter 中的 ClipOval 小部件:全面指南
Flutter 中的 ClipOval 小部件:全面指南 在Flutter的丰富布局库中,ClipOval是一个用于裁剪子组件的显示区域为椭圆形或圆形的小部件。这种裁剪效果可以用于创建头像、图标或其他图形元素的美观边框。本文将提供ClipOval的全面指南,帮助你了解…...
ubuntu 硬盘转移
我插了两个 文件系统: ubuntu 硬盘转移: sudo dd if/dev/sdX1 of/dev/sdY1 bs128K convnoerror,sync statusprogressdd 的意思是DiskToDisk,if 是输入文件系统,of是输出文件系统。 bs是每次传递的数据大小。 注意:接…...
three.js中使用CameraHelper来可视化调整阴影相机的范围
1. three.js中使用CameraHelper来可视化调整阴影相机的范围 光源 const directionLight new THREE.DirectionalLight(0xffffff, 1); directionLight.position.set(100, 60, 20); directionLight.castShadow true; scene.add(directionLight);设置计算阴影的范围 direction…...
Golang发送GET请求并设置查询参数
服务端 package mainimport ("encoding/json""net/http""zdpgo_chi""zdpgo_chi/middleware" )func main() {r : zdpgo_chi.NewRouter()r.Use(middleware.RequestID)r.Use(middleware.RealIP)r.Use(middleware.Logger)r.Use(middlewar…...
c++笔记3
优先队列 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。优先队列是一种按照优先级决定出队顺序的数据结构,优先队列中的每个元素被赋予级别,队首元素的优先级最高。 例如:4入队,…...
唠唠叨叨,每日进度
今天学了一个strcpy’的模拟实现,现在需要去写水课作业了,加油!!!...
Vulhub——CAS 4.1、AppWeb、apisix
文章目录 一、Apereo CAS 4.1(反序列化命令执行漏洞)二、CVE-2018-8715(AppWeb认证绕过漏洞)三、apisix3.1 CVE-2020-13945(默认密钥漏洞)3.2 CVE-2021-45232(Dashboard API权限绕过导致RCE) 一…...
Python Beautiful Soup 使用详解
大家好,在网络爬虫和数据抓取的领域中,Beautiful Soup 是一个备受推崇的 Python 库,它提供了强大而灵活的工具,帮助开发者轻松地解析 HTML 和 XML 文档,并从中提取所需的数据。本文将深入探讨 Beautiful Soup 的使用方…...
Java进阶学习笔记29——Math、System、Runtime
Math: 代表的是数学,是一个工具类,里面提供的都是对数据进行操作的一些静态方法。 示例代码: package cn.ensourced1_math;public class MathTest {public static void main(String[] args) {// 目标:了解Math类提供…...
TOTP 算法实现:双因素认证的基石(C/C++代码实现)
双因素认证(Two-Factor Authentication, 2FA)扮演着至关重要的角色。它像是一道额外的防线,确保即便密码被窃取,不法分子也难以轻易突破。在众多双因素认证技术中,基于时间的一次性密码(Time-Based One-Tim…...
aws eks理解和使用podidentity为pod授权
参考链接 https://www.amazonaws.cn/new/2024/amazon-eks-introduces-eks-pod-identity/https://aws.amazon.com/cn/blogs/aws/amazon-eks-pod-identity-simplifies-iam-permissions-for-applications-on-amazon-eks-clusters/ 先决条件 集群版本需要符合要求,如果…...
面向可复用性和可维护性的设计模式 课程学习总结
什么是设计模式 设计模式:在软件设计中给定上下文中常见问题的通用的、可重用的解决方案。 设计模式分类 1. 创建型模式——Creational patterns 关注对象创建的过程 1.1 工厂方法模式 定义用于创建对象的接口,但让子类决定要实例化哪个类。工厂方…...
修复谷歌 AdSense 的 Ads.Txt 无效的有收益损失风险提示
明月的 AdSense 账号后台一直都有“有收益损失风险 - 您需要纠正 ads.txt 文件存在的一些问题,以免严重影响您的收入。”的提示长达一年多了,这次重新开始投放谷歌 AdSense 广告后感觉需要解决掉这个问题了,因为已经全站使用了 CloudFlare&am…...
使用向量叉乘,来计算一个点到一条线的距离
1. 使用向量叉乘,来计算一个点到一条线的距离 如果说一条线段的两个端点坐标分别是,A,B点,到线段外一点P的距离。 我们可以把,这三个点连接起来,得到一个三角形,此时的步骤就是这样的 计算这个…...
学习笔记——交通安全分析02
目录 前言 当天学习笔记整理 绪论 结束语 前言 #随着上一轮SPSS学习完成之后,本人又开始了新教材《交通安全分析》的学习 #整理过程不易,喜欢UP就点个免费的关注趴 当天学习笔记整理 绪论 美国在道路设施安全改善过程中,形成了数据基…...
pytest-sugar插件:对自动化测试用例加入进度条
摘要 在自动化测试过程中,测试进度的可视化对于开发者和测试工程师来说非常重要。本文将介绍如何使用pytest-sugar插件来为pytest测试用例添加进度条,从而提升测试的可读性和用户体验。 1. 引言 自动化测试是软件开发过程中不可或缺的一部分ÿ…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门  {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
