C++ 命名空间 namespace详解

文章目录

    • 1 . 前言
    • 2 . 命名冲突
    • 3 . 命名作用域
    • 4 . 匿名空间
    • 5 . 命名嵌套
    • 6 . 命名动态赋值
    • 7 . 命名空间追加内容
    • 8 . 命名空间指定
    • 9 . 小结


【极客技术传送门】 : https://blog.csdn.net/Engineer_LU/article/details/135149485


1 . 前言

  • 此篇博文详解C++的namespace命名空间
  • 平台 : Qt

2 . 命名冲突

在这里插入图片描述

【Q】以上代码看起来似乎无问题,编译为什么出现错误?
【A】因为stdlib中也有rand,因此产生命名冲突

在这里插入图片描述

【Q】怎么解决冲突问题?
【A】上图把用到的变量加前缀命名,以此区分变量,声明一个命名空间namespace MySpace,这里的MySpace是自定义命名,编译运行就正常了,打印出两个rand的地址,可以看到两个rand的地址是不一样的,就好比这个世界上有很多人叫张伟,广东有个张伟,上海也有个张伟,那么只需要在前缀声明 广东::张伟 或者 上海::张伟 ,同理以此来区分同一个变量名



3 . 命名作用域

在这里插入图片描述

【Q】以上代码看起来似乎无问题,编译为什么出现错误?
【A】因为namespace的 作用域必须在全局 ,上图在局部区域声明,因此编译异常。



4 . 匿名空间

在这里插入图片描述

【Q】以上代码看起来似乎无问题,编译为什么出现错误?
【A】因为上图中namespace设为 匿名空间相当于static ,上图中stdlib有一个rand,匿名也有一个rand,那么使用时未标注用的哪个命令空间下的rand,因此编译时不知道你要用哪个空间的rand,因此报错,因此如果要用匿名空间里的变量,只能把其他移除掉



5 . 命名嵌套

在这里插入图片描述

上图两个rand的地址是不同的,说明不是同一个,因此可以支持嵌套使用命名空间,使用的时候加上前缀就可以了。



6 . 命名动态赋值

在这里插入图片描述

上图看到在运行过程中,命名空间可以动态赋值

7 . 命名空间追加内容

在这里插入图片描述

上图看到第一次定义命名空间包含了内容后,后续依然可以继续追加内容

8 . 命名空间指定

在这里插入图片描述

上图看到有两个命名空间都定义了同一个内容的情况下,可以使用 using namespace xxx 来让往后指定对应xxx命名空间的内容,但是有个注意事项,如下图所示

在这里插入图片描述

【Q】上图中为什么会报错?
【A】因为using namespace xxx 只能在某个作用域下声明一个命名空间,如果用using namespace xxx 声明了两个不同的命名空间,编译器就不知道往后的内容是以哪个命名空间为准,这里可能有个疑问,最后面声明的不应该可以确定吗?因为C++不希望太复杂,虽然C++已经较为复杂了,想象一下假设在一个作用域不断的声明,那么一旦程序大起来有20000行,里面用using namespace xxx 声明几百个命名空间,假设写程序的人没有对每个变量都加前缀,那后面的人看第14384行某个变量,这时候怎么知道是哪个命名空间的?往上慢慢翻么…写程序最忌讳就是这样的操作!因此禁止了这个行为。

9 . 小结

以上用实际的平台来跑C++的namespace特性,问题逻辑梳理清晰且简洁,谢谢观看。

技术交流QQ群 : 745662457
群内专注 - 问题答疑,项目外包,技术研究

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker 教程

Docker 文章目录 Docker1.Docker概述1.1Docker为什么会出现1.2Docker能做什么?1.3Docker主要名词 2.阿里云镜像加速3部署Mysql4.常见命令4.1镜像命令4.2容器命令4.3命令别名 5.数据卷5.1什么是数据卷?5.2数据卷命令5.3.挂载本地目录或文件 6.镜像6.1镜像…

Unity DOTS中的baking(二)Baker的触发

Unity DOTS中的baking(二)Baker的触发 我们知道,当传入Baker的authoring component的值发生变化时,就会触发baking。不过在有些情况下,component所引用的对象没有变化,而是对象自身内部的一些属性发生了变化…

七夕祭

title: 七夕祭 date: 2024-01-03 22:47:05 tags: 传送门 题目大意 解题思路 行的感兴趣的摊点或者列的感兴趣的摊点的数量能被行数或者列数整除,则能够实现要求。“均分”思想,设总感兴趣摊点数 T T T 和行数列数 n n n,当前感兴趣的摊点数…

Unity报错:InvalidOperationException: Insecure connection not allowed的解决方法

问题描述 在导入Steam VR 插件后报错&#xff1a; InvalidOperationException: Insecure connection not allowed UnityEngine.Networking.UnityWebRequest.SendWebRequest () (at <4139bb31c03640e7b650db6ec39d5754>:0) UnityEngine.WWW..ctor (System.String url) (…

13|代理(下):结构化工具对话、Self-Ask with Search以及Plan and execute代理

13&#xff5c;代理&#xff08;下&#xff09;&#xff1a;结构化工具对话、Self-Ask with Search以及Plan and execute代理 什么是结构化工具 LangChain 的第一个版本是在 2022 年 11 月推出的&#xff0c;当时的设计是基于 ReAct 论文构建的&#xff0c;主要围绕着代理和工…

xlrd.biffh.XLRDError: Can‘t find workbook in 0LE2 compound document

今天在运行之前可以正常运行的程序&#xff0c;解析excel文件&#xff0c;代码简单示例如下&#xff1a; import pandas as pddf pd.read_excel("F:\\1.xlsx")# 解析文件 不过&#xff0c;这次却遇到了一个问题&#xff0c;如下图&#xff1a; 第一次遇到这个错误…

Oracle VirtualBox中Linux系统基本使用方法——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项

前言 小北的这篇博客介绍的是关于用VirtualBox中下载好的ubuntu系统中&#xff0c;为搭建Hadoop平台所做的命令操作准备&#xff0c;希望能帮助不会的人有指引作用。 没有安装好VirtualBox中的ubuntu系统以及创建Hadoop账户的请参考小北之前的三篇博客&#xff1a; ubuntu18…

卷积神经网络|制作自己的Dataset

在编写代码训练神经网络之前&#xff0c;导入数据是必不可少的。PyTorch提供了许多预加载的数据集&#xff08;如FashionMNIST&#xff09;&#xff0c;这些数据集 子类并实现特定于特定数据的函数。 它们可用于对模型进行原型设计和基准测试&#xff0c;加载这些数据集是十分…

【PID精讲 13 】位置式PID和增量式PID

文章目录 位置式PID和增量式PID一、位置式PID控制算法二、增量式PID控制算法及仿真三、位置式与增量式优缺点 位置式PID和增量式PID 在计算机控制系统中&#xff0c;PID控制是通过计算机程序实现的&#xff0c;因此它的灵活性很大。一些原来在模拟PID控制器中无法实现的问题&a…

聚道云软件连接器带给服装行业客户的业务革新

【客户介绍】 某服装制作企业&#xff0c;专注于设计和生产各类服饰。追求时尚与品质的完美结合&#xff0c;以满足不同消费者的需求。凭借丰富的行业经验&#xff0c;该企业不断创新&#xff0c;致力于提供优质的服装产品和服务。我们的目标是成为消费者心目中的首选品牌&…

【Electron】快速建立Vue3+Vite+Electron Ts项目

git https://github.com/electron-vite/electron-vite-vue 创建项目 npm create electron-vite or pnpm create electron-vite 初始化 pnpm install or pnpm i 启动项目 pnpm dev 打包项目 pnpm build 项目创建成功后默认情况下 窗口是H800 W600 在createWindow 函数…

2.5 设计FMEA第五步:风险分析

2.5.1 目的 DFMEA风险分析的目的是&#xff1a;通过评估严重度&#xff08;S&#xff09;、频度(O)和探测度(D)来估计风险&#xff0c;进而对采取的措施进行优先级排序&#xff08;AP&#xff09;。 其主要目标包括&#xff1a; 针对失效&#xff0c;分配控制措施&#xff0…

人机交互不是人机融合智能

一、人机交互和人机融合智能是两个不同的概念 人机交互是指人类与计算机之间的信息交流和操作方式&#xff0c;包括输入和输出界面、交互技术、用户体验等方面。人机交互的目标是提供用户友好的界面和自然的交互方式&#xff0c;使人类能够与计算机更加高效地进行沟通和协作。 …

增删改查语句实现了解不同的函数与特殊字符unionunion all区别

一、crud&#xff08;增删改查&#xff09; 1.1、查询 概念&#xff1a; 查询数据是指从数据库中根据需求&#xff0c;使用不同的查询方式来获取不同的数据&#xff0c;是使用频率最高、最重要的操作 注&#xff1a;在MySQL中&#xff0c;当执行一条SQL语句后&#xff0c;系…

Java中的序列化方法探索

.为什么要序列化 对象不序列化&#xff0c;能直接存储吗&#xff1f; 在 Java 中&#xff0c;序列化是将对象的状态信息转换为可以存储或传输的形式&#xff08;例如&#xff0c;转换为字节流&#xff09;的过程。在对象数据需要在网络上传输或需要在磁盘上持久化存储时&#…

初始数字孪生

文章目录 概念定义 架构框图 基本要求 功能要求 服务应用 参考文献 概念定义 数字孪生&#xff08;digital twin&#xff09;&#xff0c;是指具有保证物理状态和虚拟状态之间以适当速率和精度同步的数据连接的特定目标实体的数字化表达。 架构框图 数字孪生的整体架构&a…

C# halcon 工业产品尺寸测量

产品检测 这段代码是一个基于HalconDotNet的Windows窗体应用程序&#xff0c;主要用于图像处理和测量。以下是对代码的一些总结&#xff1a; 1. **图像显示与加载&#xff1a;** - 使用HalconDotNet库进行图像处理。 - 通过OpenFileDialog实现图像文件的选择和加载。 …

Vue v-html中内容图片过大自适应处理

之前图片如下&#xff0c;图片已经超出了页面的展示范围 对v-html增加样式处理 <div class"body padding-l scroll " v-html"docData.content"> </div><style scoped>.body >>> img {max-width: 100% ;} </style>…

[书生·浦语大模型实战营]——书生·浦语大模型全链路开源体系

大模型成为发展通用人工智能的重要途径 书生浦语大模型开源历程 书生浦语模型性能 从模型到应用 应用例子&#xff1a;智能客服/个人助手/行业应用 实现流程&#xff1a; 开源开放体系&#xff1a; 1.数据——书生万卷 价值观对齐这个挺有意思嗷&#xff01; 2.预训练工具…

redis复习笔记02(小滴课堂)

分布式缓存Redis6常见核心配置讲解 查看配置文件&#xff1a; 创建配置文件&#xff1a; 配置完我们去验证一下&#xff1a; 启动成功就没有问题了。 可以看到redis日志。 然后我们就可以连接我们的redis了&#xff1a; 设置了密码就需要密码登录了。 如果登录了错误的密码也无…