命名空间————————

news2024/9/20 5:39:59

一、namespace的价值

在C/C++中变量、函数、类等都是大量存在的,这些变量、函数和类的名称都存在于全局作用域中,可能会导致冲突。

为了避免这些冲突的产生所以我们使用namespace这种命名空间来对标识符的名称进行本地化。

我们来看下面这段代码:

#include<stdio.h>
#include<stdlib.h>

int rand = 10;

int main()
{
	printf("%d ", rand);
	return 0;
}

error C2365: “rand”: 重定义;以前的定义是“函数”

在这里报出了一个错误,“rand”重定义,以前的定义是“函数” 就是因为所在空间的原因造成的,rand是一个全局的变量,在这个文件中引入了rand这个函数,那么他就会因为同样的的名字造成重定义的错误。要解决这样的情况就需要使用命名空间来进行处理,

二、namespace的定义

定义命名空间,需要使用namespace关键字,后面跟命名空间的名字,然后介意对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量、函数、类型等。

namespace的本质是定义出一个域,这个域和全局域各自独立,不同的域可以定义同名变量,所以我们来看下面的rand不再冲突了:

namespace XL
{
	int rand = 10;
}

int main()
{
	printf("%d ", XL::rand);
	return 0;
}

在这里不会出现任何的冲突,此时就解决了变量、函数、类等定义过多导致的命名冲突问题。

C++中有函数局部域、全局域、命名空间域、类域;域的存在会影响编译器编译时查找对应的变量、函数等的逻辑,而且局部域和全局域还会影响变量的生命周期,命名空间域和类域不影响变量的生命周期。

1、namespace定义的命名空间可以定义多种类型的数据:
namespace XL
{
	int rand = 10;

	struct XLs
	{
		int s;
		char c;
	};

	int Add(int x, int y)
	{
		return x + y;
	}
}
2、命名空间是可以嵌套的
namespace XL
{
	int rand = 10;

	struct XLs
	{
		int s;
		char c;
	};

	int Add(int x, int y)
	{
		return x + y;
	}
	namespace XLL
	{
		int rand = 100;

		struct XLs
		{
			int s;
			char c;
		};

		int Add(int x, int y)
		{
			return x + y;
		}
	}
}

在这个嵌套的空间中我们可以定义名称相同的变量、函数、结构体等,并不会出现任何问题。

3、命名空间在不同的文件中定义相同的空间名,编译器会默认他们是在同一个域中

我们来看下面这段代码:

//test.h
#include<stdio.h>
#include<stdlib.h>

namespace XL
{
	int rand = 10;

	struct XLs
	{
		int s;
		char c;
	};

	int Add(int x, int y)
	{
		return x + y;
	}
}

//test.cpp
#include"test.h"

namespace XL
{
	int rand_copy = rand;
}

int main()
{
	printf("%d ", XL::rand_copy);
	return 0;
}

在这里我们在别的文件中使用头文件中定义的数据是可以正常使用的,也就说明了在这里,被命名空间只要名字相同定义的变量在其他文件中同样可以被访问。

三、命名空间的使用

编译查找一个变量的定义/声明时,默认只会在局部或者全局查找,所以我们直接对命名空间中的数据进行访问会导致程序报错,我们可以使用下面这几种方式来进行访问:

方式一:
namespace XL
{
	int rand = 10;

	struct XLs
	{
		int s;
		char c;
	};

	int Add(int x, int y)
	{
		return x + y;
	}
}


int main()
{
    //指定命名空间的访问,在项目中我们也推荐使用这种用法
	printf("%d ", XL::rand);
	return 0;
}
方式二:
namespace XL
{
	int rand = 10;

	struct XLs
	{
		int s;
		char c;
	};

	int Add(int x, int y)
	{
		return x + y;
	}
}

指定命名空间的访问,在项目中我们也推荐使用这种用法
//int main()
//{
//	printf("%d ", XL::rand);
//	return 0;
//}

//using将命名空间中的成员展开,项目中经常访问的不存在冲突的成员推荐这中方式
using XL::rand;

int main()
{
	printf("%d ", rand);
	return 0;
}
方式三:
namespace XL
{
	int rand = 10;
	int n = 10;
	struct XLs
	{
		int s;
		char c;
	};

	int Add(int x, int y)
	{
		return x + y;
	}
}

// 展开命名空间中的所有成员,不推荐在项目中使用
// 并且即使展开了,有冲突的数据还是可能报错,但仅在联系中使用是可以的
using namespace XL;

int main()
{
	printf("%d ", n);
	return 0;
}

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

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

相关文章

使用 MobaXterm 远程连接 Linux 虚拟机并实现文件传输

文章目录 前言一、什么是 MobaXterm二 、MobaXterm 安装三、使用 MobaXterm 远程连接 Linux 虚拟机1. 准备工作2. 创建 SSH 连接3. 登录虚拟机 四、使用 MobaXterm 进行文件传输总结 前言 在日常开发和运维中&#xff0c;Windows 用户经常需要通过远程连接到 Linux 服务器进行…

链式栈讲解

文章目录 &#x1f34a;自我介绍&#x1f34a;链式栈入栈和出栈linkstack.hlinkstack.c 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以&#xff1a;点赞关注评论收藏&#xff08;一键四连&#xff09;哦~ &#x1f34a;自我介绍 Hello,大家好&#xff0c;我是小珑也要…

UBUNTU20.04安装CH384串口卡驱动

继续上文&#xff1a;统信UOS安装CH384串口卡驱动-CSDN博客 统信UOS系统成功安装CH384串口驱动后&#xff0c;继续在ubuntu20.04下安装驱动&#xff0c;发现一直报错&#xff0c;原因是内核驱动不一致。 解决办法&#xff1a; 1. 下载最新的驱动。CH35XCH384驱动源文件资源-C…

【WPF】02 按钮控件圆角配置及状态切换

按钮圆角 先从工具箱里拖进来一个Button控件&#xff0c;然后对这个按钮进行美化。 首先在 xaml 里按钮控件部分 添加如下代码&#xff1a; <Button x:Name"btnLogin" Content"登录" HorizontalAlignment"Center" Margin"0,399,0,0&q…

报错合计-1

向开发描述&#xff1a;先勾选一个病灶后复制&#xff0c;控制台报错 报错类型查询后为前端DOM节点相关报错&#xff0c;提给前端开发 报错解释&#xff1a; TypeError: Failed to execute selectNode on Range: parameter 1 is not of type Node 这个错误表明你尝试使用 Range…

【机器学习】:深潜智能的底层逻辑、前沿探索与未来展望】

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 在科技的浩瀚星空中&#xff0c;机器学习犹如一颗璀璨的新星&#xff0c;以其独特的魅力和无限潜力&#xff0c;引领着我们向智能的深处探索。今天&#xff0c;我们将一同踏上这场深度之旅&#xff0c;不仅解析…

AI时代,服务器厂商能否打破薄利的命运?

文&#xff5c;刘俊宏 编&#xff5c;王一粟 AI大模型正在引发新一轮的“算力焦渴”。 近日&#xff0c;OpenAI刚发布的o1大模型再次刷新了大模型能力的上限。对比上一次迭代的版本&#xff0c;o1的推理能力全方位“吊打”了GPT-4o。更优秀的能力&#xff0c;来自与o1将思维…

Flink官方文档

Flink官方文档&#xff08;全面、详细&#xff09;&#xff1a;https://nightlies.apache.org/flink/flink-docs-master/zh/

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL24

边沿检测 有一个缓慢变化的1bit信号a&#xff0c;编写一个程序检测a信号的上升沿给出指示信号rise&#xff0c;当a信号出现下降沿时给出指示信号down。 注&#xff1a;rise,down应为单脉冲信号&#xff0c;在相应边沿出现时的下一个时钟为高&#xff0c;之后恢复到0&#xff0…

116页PPT麦肯锡方法详解-用简单的方法做复杂的事

读者朋友大家好&#xff0c;最近有会员朋友咨询晓雯&#xff0c;需要《116页PPT麦肯锡方法详解-用简单的方法做复杂的事》资料&#xff0c;欢迎大家文末扫码下载学习。 以下是在实际工作中应用麦肯锡问题解决法的具体方式&#xff1a; 一、项目管理与流程优化领域 界定问题 …

再看Java-笔试

放在前面的话 最近确实有些空闲&#xff0c;分配的功能从一开始的两眼一黑到现在的一上午就能完成&#xff0c;这何尝不是一种进步呢。 该说不说&#xff0c;海康的API问题相比较其他第三方的API还是蛮多的&#xff0c;而且10月份人工客服还会停运&#xff0c;不过到那个时候…

LeetCode54. 螺旋矩阵(2024秋季每日一题 21)

给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&#xff1a; 输入&#xff1a;matrix [[1,…

由于安全风险,安全领导者考虑禁止人工智能编码

安全团队与开发团队之间的紧张关系 83% 的安全领导者表示&#xff0c;他们的开发人员目前使用人工智能来生成代码&#xff0c;57% 的人表示这已成为一种常见做法。 然而&#xff0c;72% 的人认为他们别无选择&#xff0c;只能允许开发人员使用人工智能来保持竞争力&#xff0…

【Unity】对象池 - 未更新完

自定义泛型对象池 文章目录 自定义泛型对象池封装泛型类例子 使用Unity自带对象池 封装泛型类 public abstract class MyPool<T> : MonoBehaviour where T :Component {[SerializeField] protected T prefab; // 生成的预制体[SerializeField] protected int defaultNum…

Delphi5利用DLL实现窗体的重用

文章目录 效果图参考利用DLL实现窗体的重用步骤1 设计出理想窗体步骤2 编写一个用户输出的函数或过程&#xff0c;在其中对窗体进行创建使它实例化步骤3 对工程文件进行相应的修改以适应DLL格式的需要步骤4 编译工程文件生成DLL文件步骤5 在需要该窗体的其他应用程序中重用该窗…

8.sklearn-模型保存

文章目录 环境配置&#xff08;必看&#xff09;头文件引用1.保存模型代码工程运行结果生成文件 2.加载模型代码工程运行结果 环境配置&#xff08;必看&#xff09; Anaconda-创建虚拟环境的手把手教程相关环境配置看此篇文章&#xff0c;本专栏深度学习相关的版本和配置&…

HTML基础和常用标签

“合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。” 文章目录 前言文章有误敬请斧正 不胜感恩&#xff01;1. HTML的基本结构解释&#xff1a; 2. 常见标签的介绍2.1 标题和文本2.2 链接和图片2.3 列表2.4 …

云安全 | AWS S3存储桶安全设计缺陷分析

什么是AWS S3&#xff1f; 默认情况下&#xff0c;Amazon S3 是安全的。创建后&#xff0c;只有资源所有者才能访问他们创建的 Amazon S3 资源。 Amazon S3 支持用户身份验证来控制对数据的访问。您可以使用存储桶策略和访问控制列表 (ACL)等访问控制机制来有选择地向用户和用…

solidwork直线画圆弧的操作

效果如下&#xff1a; 踩过好多坑了。 首先选择直线 先点一下这个点拉出来再回到这个点&#xff08;这个过程点一次就可以了&#xff09;&#xff0c;注意注意一定要这么做&#xff01;否则没有圆弧

prime1靶机渗透 (信息收集 内核提权)

靶机信息 vulnhub靶机 prime1 主机发现 -sn 是scan and no port hack 只用于主机发现 ┌──(kali㉿kali)-[~] └─$ sudo nmap -sn 192.168.50.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-09 02:25 EDT Nmap scan report for 192.168.50.1 Host is up …