C++命名空间

C++ 命名空间 在 C++ 中,命名空间不仅可以封装变量,还可以封装函数。通过命名空间封装函数,我们可以轻松管理同名的函数、变量,使代码结构更加清晰。在 C++ 中,命名空间不仅可以独立存在,还可以嵌套在其他命名空间中。通过命名空间的嵌套,我们可以进一步组织代码,避免命名冲突。在 C++ 中,我们可以自己定义命名空间,将相关的变量、函数等封装到一个命名空间里,避免与其他部分的代码产生冲突。此时,可以通过命名空间名来明确使用命名空间中的变量。下面通过一个示例展示如何将函数封装在命名空间中,并解释不同情况下的使用方法。 阅读详情


前言

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。

一、命名空间的定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。
如:

//1.常规命名空间
namespace T1 //T1为命名空间名称
{
	int a = 0;
	int* b = 0;//可以定义变量
	int Add(int d, int e) //也可以定义函数
	{
		return d + e;
	}

}
//2.命名空间的嵌套
namespace T2
{
	int a = 1;
	int* b = 0;//可以定义变量
	int Add(int d, int e) //也可以定义函数
	{
		return d + e;
	}
	namespace T3
	{
		int a = 0;
		int* b = 0;//可以定义变量
		int Add(int d, int e) //也可以定义函数
		{
			return d + e;
		}
	}
}
//3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中
namespace T1
{
	int Sub(int d, int e)
	{
		return d - e;
	}
}

注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中

二、命名空间的使用

2.1加命名空间名称及作用域限定符

#include<iostream>
//1.常规命名空间
namespace T1 //T1为命名空间名称
{
	int a = 0;
	int* b = 0;//可以定义变量
	int Add(int d, int e) //也可以定义函数
	{
		return d + e;
	}

}
//2.命名空间的嵌套
namespace T2
{
	int a = 1;
	int* b = 0;//可以定义变量
	int Add(int d, int e) //也可以定义函数
	{
		return d + e;
	}
	namespace T3
	{
		int a = 0;
		int* b = 0;//可以定义变量
		int Add(int d, int e) //也可以定义函数
		{
			return d + e;
		}
	}
}
//3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中
namespace T1
{
	int Sub(int d, int e)
	{
		return d - e;
	}
}
int main()
{
	printf("%d\n", T1::a);//打印T1命名空间中的a变量    结果为0
	printf("%d\n", T2::a);//打印T2命名空间中的a变量    结果为1

}

2.2使用using将命名空间中成员引入

#include<iostream>
//1.常规命名空间
namespace T1 //T1为命名空间名称
{
	int a = 0;
	int* b = 0;//可以定义变量
	int Add(int d, int e) //也可以定义函数
	{
		return d + e;
	}

}
//2.命名空间的嵌套
namespace T2
{
	int a = 1;
	int* b = 0;//可以定义变量
	int Add(int d, int e) //也可以定义函数
	{
		return d + e;
	}
	namespace T3
	{
		int a = 0;
		int* b = 0;//可以定义变量
		int Add(int d, int e) //也可以定义函数
		{
			return d + e;
		}
	}
}
//3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中
namespace T1
{
	int Sub(int d, int e)
	{
		return d - e;
	}
}
using T1::a;
int main()
{
	printf("%d\n",a);//打印T1命名空间中的a变量    结果为0
	printf("%d\n",T2::a);//打印T2命名空间中的a变量    结果为1

}

2.3使用using namespace 命名空间名称引入

namespace T1 //T1为命名空间名称
{
	int a = 0;
	int* b = 0;//可以定义变量
	int Add(int d, int e) //也可以定义函数
	{
		return d + e;
	}

}
//2.命名空间的嵌套
namespace T2
{
	int a = 1;
	int* b = 0;//可以定义变量
	int Add(int d, int e) //也可以定义函数
	{
		return d + e;
	}
	namespace T3
	{
		int a = 12;
		int* b = 0;//可以定义变量
		int Add(int d, int e) //也可以定义函数
		{
			return d + e;
		}
	}
}
//3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中
namespace T1
{
	int Sub(int d, int e)
	{
		return d - e;
	}
}
using namespace T2::T3;
int main()
{
	int c = Add(3, 1);
	printf("%d", c);//结果为4

}

总结

以上上就是命名空间的全部内容希望对大家有所帮助!

C++中命名空间相同自动合并 在单个.cpp文件中时: #include<iostream> #include<cstdio> #include<string> using namespace std; namespace cam { int x=6; } namespace cam { int y=5; } namespace cam { int w=x*y; ... 阅读详情

相关推荐

C++中命名空间namespace|头文件h文件|源文件cpp文件详解

命名空间通过为代码元素(变量、函数、类)**创建独立作用域**,解决大型项目中名称重复问题。例如,当多个库都定义了`print()`函数时,通过`A::print()`和`B::print()`明确调用来源。> `h文件`:声明函数原型、类、结构体、宏定义等,`但不包含具体实现` > `cpp文件`:包含函数或类的`具体实现代码`

警警的博客 1071

【C++】命名空间 ( namespace )

命名空间是一种用来避免命名冲突的机制,它可以将一段代码的名称隔离开,使其与其他代码的名称不冲突;命名空间的原理是将一个全局的作用域分成一个个命名空间,每个命名空间是个单独的作用域,同时若是在同一个作用域内可能出现的命名冲突也不会造成影响,有效避免了命名空间的污染;从上面可知命名空间的作用,既然命名空间能够有效防止命名冲突,那该如何定义命名空间?在定义命名空间时,应该使用namespace修饰且在该修饰词后定义名字并在其后跟**{ }**在{ }内的元素即为该命名空间的成员;

小侯宝的博客 1万+

[C++命名空间 cpp]:解读C++中的命名空间

在C++中,命名空间是一种将代码元素组织在一起并避免命名冲突的机制。你可以将任何标识符放入命名空间中,并通过命名空间限定符来访问这些标识符。这里,“::”是作用域解析运算符,用于限定标识符的作用域。在C++中,可以使用关键字“namespace”来定义命名空间。//函数代码在上面的代码中,我们定义了一个名为“MyNamespace”的命名空间,并在其中定义了一个名为“myFunction”的函数和一个名为“myVariable”的变量。本文介绍了C++中的命名空间,包括定义、使用和嵌套等方面。

2301_79326254的博客 201

C++ 之命名空间namespace【详解】

命名空间(英语:Namespace),也称命名空间、名称空间等,它表示着一个标识符(identifier)的可见范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其他命名空间中。

tang20030306的博客 1万+

安检机图像处理避坑指南:从条纹校正到物质分类,那些论文里没写的工程细节

本文深入探讨了双能X射线安检机图像处理中的关键工程实践,从条纹校正到物质分类,揭示了论文中未提及的实用技巧。针对探测器校正、物质分类模糊、伪彩色系统设计等核心问题,提供了动态参数更新、空间上下文分析和自适应色彩映射等解决方案,助力提升安检系统的准确性和鲁棒性。

weixin_30325487的博客 887

DeepSeek-OCR又更新:一起看下OCR1和OCR2

DeepSeek-AI 最近又又开源了,这次是DeepSeek-OCR2,结合之前发布的DeepSeek-OCR ,可以发现DeepSeek走出了一条不同于主流 OCR 方案的技术路线。第一代模型探索了**“视觉作为文本压缩介质”的可行性,打破了传统的序列长度限制;第二代模型则通过“Visual Causal Flow(视觉因果流)”**架构,将因果推理引入视觉编码器,解决了复杂排版下的阅读顺序难题。本文将从架构设计、逻辑结构、训练范式及工程实现四个维度,深度剖析这两代模型的异同与创新。

kakaZhui的博客 623

c++命名空间

命名空间的由来 命名空间(namespace),是c++引入的一种机制,namespace目的是用来解决全局变量名与函数名或函数名与函数名之间名称相同的冲突的。c语言没有namespace,从c扩展而来的c++早期也没有,后来的c++、java、python都使用了这种技术,甚至在一些高级语言中把namespace设计得更好。 一个客观的事实就是一个庞大的项目,如linux内核,内部上万个.c文件,变量与函数名称重名是不能避免的,如同在中国,重名太正常不过了。本节我们就是...

习惯有你 1万+

深度解析跨境支付之业务架构

详解跨境支付之业务架构

weixin_47493863的博客 1878

【C++】之命名空间(namespace)

【C++】命名空间的使用与易错点

Hello_World_213的博客 4678

Halcon dyn_threshold详解

dyn_threshold 原型 dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : ) 功能 利用局部阈值分割图像 参数列表 OrigImage (input_object):原始图像 ThresholdImage (input_object):处理后图像(一般采用滤波处理) RegionDynThresh (output_object):分割后区域 Offset (input_control):灰

ZiLiangQin的博客 1万+

cuda安装时出现错误 Unable to locate package cuda-toolkit-12-4

cuda安装时出现错误 Unable to locate package cuda-toolkit-12-4

4866

理解CPP的命名空间【仓鼠学cpp】

本文举例讲解了cpp的命名空间并且提到了cpp-17的嵌套命名空间,希望能帮助更多人理解这个概念。

weixin_60849947的博客 693

【在英伟达nvidia的jetson-orin-nx上使用调试can基础收发-硬件连接-开机自启动can-初步调试】

近期开始学习英伟达的工控板,作为新手还是有很多不同懂得地方,但是一部分它用的linux系统,有点像玩树莓派,通过自己一段时间学习can调试,终于可以简单通信了。开始的时候,自己也是什么都不是很懂,从新手一点点摸索过来,现在使用工控机,简单can通信也已经没有问题了,算是有些进步吧。每一步走的都很艰辛,需要反复验证,才能准去无误,开始以为发送没有问题就没事了,没想到发送可以却接受不行,每一步都要反复确认啊,这个问题会持续关注下吧。

qq_22146161的博客 6120

【Cpp】命名空间

全局变量和局部变量同名: 如果在全局作用域和局部作用域中都定义了同名的变量,那么在局部作用域中,全局变量会被局部变量遮蔽。// 全局变量// 局部变量,遮蔽了全局变量函数参数和局部变量同名: 如果在函数参数列表中定义了一个参数,然后在函数体中又定义了一个同名的局部变量,那么参数会被局部变量遮蔽。// 局部变量,遮蔽了函数参数宏定义和变量名冲突: 如果使用#define定义了一个宏,而这个宏的名字和某个变量名相同,那么在宏展开时可能会导致命名冲突。

Mongxin_Chan的博客 1241

用 Joule 点燃 ABAP 开发者的舞台感:SAP BTP 上的 ABAP AI 能力实战解读

摘要:SAP推出的Joule for developers和ABAP AI功能为开发者提供了智能辅助工具,旨在优化ABAP开发流程。主要功能包括上下文感知的代码预测补全、代码解释、单元测试生成和开发问题实时解答。这些能力特别适合应对Cloud环境下ABAP开发的复杂约束,如Clean Core原则和受限语法范围。通过减少重复劳动和提升代码理解效率,该工具帮助开发者将注意力集中在业务逻辑而非技术细节上。随着企业加速向S/4HANA迁移,这些AI功能将在遗留代码改造和云适配中发挥更大作用,建议团队将其纳入工程体

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 297

第七节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - 用户管理(上)

本节的内容是用户管理,后端Python代码的实现。

cuiwin的专栏 778

如何避免C++ YAML解析器符号冲突:yaml-cpp命名空间设计完整指南

在C++开发中,符号冲突是一个常见且令人头疼的问题,尤其是当项目引入多个第三方库时。yaml-cpp作为一款广泛使用的C++ YAML解析器和发射器,其命名空间设计为开发者提供了有效的冲突解决方案。本文将深入探讨yaml-cpp的命名空间架构,帮助开发者理解如何正确使用以避免符号冲突,确保项目代码的稳定性和可维护性。 ## 为什么命名空间对C++ YAML解析器至关重要 命名空间是C++中避免

gitblog_00536的博客 829

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++命名空间超级大详解

文章目录1 什么是命名空间?2 为什么要有命名空间3 命名空间里有些什么4 怎样创建一个命名空间1. 创建方法2. **头文件和cpp文件**3.命名空间的定义可以不连续4. 命名空间可以嵌套定义5. 未命名的命名空间5 怎样使用命名空间1. 通过命名空间名使用2. 通过using方法使用3. 别名4. 注意事项 1 什么是命名空间?   本质上,命名空间就是一个范围标识,比如大家都在中国,有中...

qq_39545674的博客 597

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

c++ 命名空间 匿名命名空间

文件中的任何函数中访问。匿名命名空间的作用范围仅限于当前文件,因此在同一个文件中的所有函数都可以访问匿名命名空间中的变量。3 命名空间 就是个变量指定 姓氏, 让同一个变量名可以 多次使用 不会在项目中冲突。2 同一个命名空间中的变量和其中的匿名命名空间的变量是平行的 命名不能相同。1 匿名命名空间中的变量可以在同一个。

tenc1239的博客 670

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

cpp命名空间

关于cpp的命名空间,一个小白的第一篇博客

wjcyaya的博客 516

C++命名空间 namesapce

最近在使用命名空间,想把命名空间总结下,现在只是简单的记录下使用的心得,后期会进行进一步的整理 1.就是我们是把我们的.cpp文件和.h文件都使用相同的命名空间,如果不这样做 ,会可能出现下列问题。 1.1 只在头文件中使用,那么要包含头文件,使用头文件里声明的类或者方法时,要using namespace ... 而在.cpp中没有使用 ,起不到保护的作用。 1.2只在cpp中使用,那.........

zhc的博客 608

C++之命名空间

C++对于namespace命名空间的总结。也提出了一些自己发现的有意思的现象,现给大家分享,希望大家有所收获。

u013696062的专栏 1683

C++利用命名空间实现变量的间接访问

C++利用自定义命名空间实现变量的间接访问 要求:变量 val 放在独立的 .cpp 文件的自定义命名空间中,在main函数中访问变量val 实现代码如下: myname.h #ifndef __MODULE_H #define __MODULE_H //自定义的命名空间 namespace val { //声明函数 int getval(); void setval(int...

RwinR的博客 800

51 CPP命名空间

如果声明区域有相同的名字,局部版本将隐藏命名空间中的名字,不过可以使用域名解析符使用命名空间的名称。如果全局变量,你只在源文件中定义,不在头文件中声明,那么它只能在命名空间内部使用,外部根本不知道到,效果和静态变量是一样的。如果命名空间没有名字,那么它里面的名称在当前文件中可以直接使用,且,因为它没有名字,所以其它的人和程序都用不了它里面的东西。在实际开发中,较大的羡慕会使用大量的全局名字,如类、函数、模板、变量等,很容易出现名字冲突的情况。命名空间分割了全局空间,每个命名空间是一个作用域,防止名字冲突。

wade1010的专栏 368

【C++ 命名空间】C++ 命名空间与嵌套命名空间入门指南

命名空间是C++中的一个重要概念,用于避免命名冲突,它可以将一组名称封装在一个特定的作用域中,使得这些名称与其它作用域中的名称分离开来。 命名空间的概念 命名空间是一种逻辑分组机制,它用于将一组相关的名称封装在一个作用域中,从而避免命名冲突。命名空间可以包含变量、函数、类、结构体等各种类型的声明和定义。 命名空间的作用 C++中的函数和变量都必须有唯一的名称,如果多个函数或变量具有相同的名称,就会产生命名冲突,导致编译错误。为了避免这种情况的发生,C++提供了命名空间。通过命名空间,我们可以将一组相关的名称

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 2493
上一篇: 五道题带你搞懂二叉树(前,中,后,层)遍历
下一篇: C++之缺省参数与函数重载
1无名之辈1
博客等级 码龄5年 4674粉丝 46原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1无名之辈1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值