【C++】C++中的命名/名字/名称空间 namespace

C++中的命名/名字/名称空间 namespace

  • 1、问题引入
  • 2、概念
  • 3、作用
  • 4、格式
  • 5、使用命名空间中的成员
    • 5.1 using编译指令( 引进整个命名空间) ---将这个盒子全部打开
    • 5.2 using声明使特定的标识符可用(引进命名空间的某个成员) ---将这个盒子中某个成员的位置打开
    • 5.3 调用的时候指定是哪一个命名空间下的成员
  • 6、示例代码
  • 7、命名空间的嵌套
  • 8、同名命名空间
  • 9、匿名命名空间
  • 10、全局作用域

1、问题引入

\quad 探讨:在实际的系统开发中,所有的开发工作,通常都不会仅由一个人来开发完成,不同的人只负责自己功能模块,他们在设计时,比如声明变量,通常情况下,不会考虑其他人是否已使用该变量名,在模块功能测试时,相互之间是独立的,完全没有问题,当系统功能合成 时,不可避免地会出现变量或函数的命名冲突,因为变量或函数重名而导致的问题将会造成一定的混乱。所以如何在同一个.cpp文件中定义相同变量名的两个全局变量呢

#include<iostream>int val = 200;
int val = 300;int main()
{return 0;
}

现象:编译会报错
解决方法:使用命名空间区分这两个全局变量

2、概念

其实命名空间就是类似一个黑盒子

3、作用

防止名字冲突

4、格式

namespace 命名空间名字
{//声明定义变量//声明定义函数//定义结构体/共用体/枚举 数据类型//声明类  定义对象
}

5、使用命名空间中的成员

5.1 using编译指令( 引进整个命名空间) —将这个盒子全部打开

 using namespace 命名空间名字;

5.2 using声明使特定的标识符可用(引进命名空间的某个成员) —将这个盒子中某个成员的位置打开

using 命名空间名字::成员名;

5.3 调用的时候指定是哪一个命名空间下的成员

cout<<命名空间名字::成员名

6、示例代码

#include<iostream>using namespace std;//使用名称空间LcdSpace  
namespace LcdSpace{int x = 10;int y = 20;typedef struct{int data;}Data_t;enum {LCD_COLOR_RED,LCD_COLOR_GREEN};int lcd_init(){return 0;}}; 
//使用名称空间TouchSpace
namespace TouchSpace{int x = 100;int y = 200;
};//外部的全局变量   
//int x = 1000;
//int y = 2000;//2)使用using声明的方式去引入名字空间中的某个成员
//把这个TouchSpace黑盒子 打开一个角落,正好把某个成员放出来
//格式:using 命名空间名字::成员名;
//using  TouchSpace::x;void test01()
{using namespace LcdSpace;cout<<"x:"<<x<<" y:"<<y<<endl;
}int main()
{//3)使用using编译指令的方式 打开整个名字空间 using namespace TouchSpace;//如何使用名字空间里面的成员//1)使用 作用域限定符:: 去指定//格式:  名字空间的名字::成员变量名std::cout<<TouchSpace::x<<" "<<TouchSpace::y<<std::endl;std::cout<<x<<" "<<y<<std::endl;std::cout<<LcdSpace::x<<" "<<LcdSpace::y<<std::endl;LcdSpace::Data_t data;LcdSpace::lcd_init();//我们有时候为了强调该变量的全局特性,可以在前面加上::修饰cout<<x<<" "<<y<<endl;test01();return 0;
}

7、命名空间的嵌套

namespace myspace{int x=10;int y=20;namespace spaceA{int a=100;void setValue(int data){a = data;}void printValue(){std::cout<<"a:"<<a<<std::endl;}}
}
使用:
myspace::spaceA::printValue();

8、同名命名空间

\quad 命名空间可以分开定义,也就是说,你在定义一个命名空间之后,如果后面想要在这个命名空间里面再次添加某些数据成员或者函数成员,可以再次接着定义。

namespace myspace{int x=10;int y=20;
}
namespace myspace{int a=100;int b=200;void print(){std::cout<<"x:"<<x<<" y:"<<y<<std::endl;}
}

9、匿名命名空间

namespace {int data=123;
}

可以在本文件中直接使用data, 限制空间中的成员只能在本文件中使用,类似c语言中的static修饰

10、全局作用域

\quad 全局作用域是从C语言就开始有的一种作用域,在C++中,有时为了强调某符号的全局特性,或为了避免与导入的名字空间中的重名符号冲突,会在使用全局符号的时候加上 作用域解析符

int global = 100;
int main()
{int global = 200;// 重名的标识符,外层的作用域会被内层的掩盖cout <<   global << endl; // 输出200// 使用双冒号引用全局作用域中的标识符cout << ::global << endl; // 输出100
}
  • 全局作用域的名字空间是匿名的,引用全局作用域符号只需加 :: 即可。
  • 名字空间的本质就是作用域,遵守C语言关于作用域的基本原则,如内层作用域重名符号会掩盖外层作用域的重名符号。

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

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

相关文章

Arduino IDE中离线更新esp32 3.2.0版本的办法

在Arduino IDE中更新esp32-3.2.0版本是个不可能的任务&#xff0c;下载文件速度极慢。网上提供了离线的办法&#xff0c;提供了安装文件&#xff0c;但是没有3.2.0的版本。 下面提供了一种离线安装方法 一、腾讯元宝查询解决办法 通过打开开发板管理地址&#xff1a;通过在腾…

【工具使用-数据可视化工具】Apache Superset

1. 工具介绍 1.1. 简介 一个轻量级、高性能的数据可视化工具 官网&#xff1a;https://superset.apache.org/GitHub链接&#xff1a;https://github.com/apache/superset官方文档&#xff1a;https://superset.apache.ac.cn/docs/intro/ 1.2. 核心功能 丰富的可视化库&…

算法每日一题 | 入门-顺序结构-三角形面积

三角形面积 题目描述 一个三角形的三边长分别是 a、b、c&#xff0c;那么它的面积为 p ( p − a ) ( p − b ) ( p − c ) \sqrt{p(p-a)(p-b)(p-c)} p(p−a)(p−b)(p−c) ​&#xff0c;其中 p 1 2 ( a b c ) p\frac{1}{2}(abc) p21​(abc) 。输入这三个数字&#xff0c;…

MongoDB入门详解

文章目录 MongoDB下载和安装1.MongoDBCompass字段简介1.1 Aggregations&#xff08;聚合&#xff09;1.2 Schema&#xff08;模式分析&#xff09;1.3 Indexes&#xff08;索引&#xff09;1.4 Validation&#xff08;数据验证&#xff09; 2.增删改查操作2.1创建、删除数据库&…

从Oculus到Meta:Facebook实现元宇宙的硬件策略

Oculus的起步 Facebook在2014年收购了Oculus&#xff0c;这标志着其在虚拟现实&#xff08;VR&#xff09;领域的首次重大投资。Oculus Rift作为公司的旗舰产品&#xff0c;是一款高端的VR头戴设备&#xff0c;它为用户带来了沉浸式的体验。Facebook通过Oculus Rift&#xff0…

安装与配置Go语言开发环境 -《Go语言实战指南》

为了开始使用Go语言进行开发&#xff0c;我们首先需要正确安装并配置Go语言环境。Go的安装相对简单&#xff0c;支持多平台&#xff0c;包括Windows、macOS和Linux。本节将逐一介绍各平台的安装流程及环境变量配置方式。 一、Windows系统 1. 下载Go安装包 前往Go语言官网&…

网络的搭建

1、rpm rpm -ivh 2、yum仓库&#xff08;rpm包&#xff09;&#xff1a;网络源 ----》网站 本地源 ----》/dev/sr0 光盘映像文件 3、源码安装 源码安装&#xff08;编译&#xff09; 1、获取源码 2、检测环境生成Ma…

多元随机变量协方差矩阵

主要记录多元随机变量数字特征相关内容。 关键词&#xff1a;多元统计分析 一元随机变量 总体 随机变量Y 总体均值 μ E ( Y ) ∫ y f ( y ) d y \mu E(Y) \int y f(y) \, dy μE(Y)∫yf(y)dy 总体方差 σ 2 V a r ( Y ) E ( Y − μ ) 2 \sigma^2 Var(Y) E(Y - \…

Ros工作空间

工作空间其实放到嵌入式里就是相关的编程包 ------------------------------------- d第一个Init 就是类型的初始化 然后正常一个catkin_make 后 就会产生如devil之类的文件&#xff0c; 你需要再自己 终端 一个catkin_make install 一下 。这样对应install也会产生&#xf…

qt国际化翻译功能用法

文章目录 [toc]1 概述2 设置待翻译文本3 生成ts翻译源文件4 编辑ts翻译源文件5 生成qm翻译二进制文件6 加载qm翻译文件进行翻译 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;Qt开发经验 &#x1f448; 1 概述 在 Qt 中&#xff0c;ts 文件和 qm 文件是用于国…

PyTorch 与 TensorFlow 中基于自定义层的 DNN 实现对比

深度学习双雄对决&#xff1a;PyTorch vs TensorFlow 自定义层大比拼 目录 深度学习双雄对决&#xff1a;PyTorch vs TensorFlow 自定义层大比拼一、TensorFlow 实现 DNN1. 核心逻辑 二、PyTorch 实现自定义层1. 核心逻辑 三、关键差异对比四、总结 一、TensorFlow 实现 DNN 1…

1ms城市算网稳步启航,引领数字领域的“1小时经济圈”效应

文 | 智能相对论 作者 | 陈选滨 为什么近年来国产动画、国产3A大作迎来了井喷式爆发&#xff1f;抛开制作水平以及市场需求的升级不谈&#xff0c;还有一个重要原因往往被大多数人所忽视&#xff0c;那就是新型信息的完善与成熟。 譬如&#xff0c;现阶段惊艳用户的云游戏以及…

【计算机视觉】语义分割:Segment Anything (SAM):通用图像分割的范式革命

Segment Anything&#xff1a;通用图像分割的范式革命 技术突破与架构创新核心设计理念关键技术组件 环境配置与快速开始硬件要求安装步骤基础使用示例 深度功能解析1. 多模态提示融合2. 全图分割生成3. 高分辨率处理 模型微调与定制1. 自定义数据集准备2. 微调训练配置 常见问…

机器学习例题——预测facebook签到位置(K近邻算法)和葡萄酒质量预测(线性回归)

一、预测facebook签到位置 代码展示&#xff1a; import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import…

对ubuntu的简单介绍

目录 1. 简介 2. 核心特点 3. 系统架构与技术亮点 4. 适用场景 5. 优缺点分析 6. 安装与配置建议 7. 未来发展方向 总结 1. 简介 Ubuntu 是基于 Debian 的开源 Linux 操作系统&#xff0c;由 Canonical 公司&#xff08;创始人 Mark Shuttleworth&#xff09;提供商业支…

多商户电商系统整套源码开源,支持二次开发,构建多店铺高效联动运营方案

在数字化浪潮席卷全球的今天&#xff0c;电商行业竞争愈发激烈&#xff0c;多商户电商平台凭借其独特的生态优势&#xff0c;成为众多企业和创业者的热门选择。一套优质的多商户电商系统不仅能为商家提供稳定的销售渠道&#xff0c;还能为平台运营者创造巨大的商业价值。分享一…

Qwen3与Deepseek R1对比(截止20250506)

Qwen3和DeepSeek R1都是在AI领域内备受关注的大规模语言模型。根据最近的评测和报道&#xff0c;以下是Qwen3与DeepSeek R1的一些对比要点&#xff1a; 全面性能&#xff1a; Qwen3被描述为在数学、推理、代码等核心能力上全面超越了DeepSeek R1。特别是在编程能力方面&#x…

Linux56 YUM源配置

epel未启动 显示系统未通过注册 配置YUM仓库 本地YUM仓库 1.备份 tar -zcf repo.tar.gz *.repo 2.挂载 mount -o ro /dev/sr0 /mnt 3.开机自启 chmod x /etc/rc.local echo ‘mount -o ro /dec/sr0 /mnt’ /etc/rc.local 4.编写本地YUM仓库 local.repo [local] namelocal yum …

二叉树—中序遍历—非递归

初始状态 假设当前从根节点 b 开始&#xff0c;此时栈为空 。 第一步&#xff1a;处理根节点 b 的左子树 调用 goAlongLeftBranch 函数&#xff0c;从节点 b 开始&#xff0c;因为 b 有左子树&#xff08;节点 a &#xff09;&#xff0c;将 b 入栈&#xff0c;此时栈&#…

R 语言科研绘图第 45 期 --- 桑基图-和弦

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.weixin.qq.c…