4.C++中程序中的命名空间

咱们在前面的程序中,提到过使用using namespace std;引入这个命名空间,那么std就是由编程系统提供的标准命名空间,那什么是命名空间呢?

想像一下,比如一个年级的学生,在记录的时候出现了重名的情况,那么这个时候应该怎么记录呢,是不是需要加一些其它的名称,比如,一三班小李同学,一一班小李同学,那个C++中也会存在类似的情况,比如我们定义一个打印函数,

cpp 复制代码
#include <iostream>
using namespace std;

void prnt()  //打印A
{
	cout << "printA" << endl;
}

int main()
{
	prnt();
	return 0;
}

上面定义了一个prnt()函数,程序执行:

但是如果想再定义一个,那么这个时间,如果再写一个,会出现什么情况?

cpp 复制代码
#include <iostream>
using namespace std;

void prnt()  //打印A
{
	cout << "printA" << endl;
}
void prnt()  //打印A
{
	cout << "printB" << endl;
}

int main()
{
	prnt();
	return 0;
}

这个时候运行程序,会出现什么情况?

下面的错误提示,

提示重复定义。

这个时候应该给一个改名,当然改名字没有任何问题,可以使用,但是如果不改名,应该怎么处理,这个时候就可以使用命名空间,

cpp 复制代码
#include <iostream>
using namespace std;

namespace A {
	void prnt() { //打印A
		cout << "printA" << endl;
	}
}
namespace B {
	void prnt() { //打印A
		cout << "printB" << endl;
	}
}
int main() {
	A::prnt();
	B::prnt();
	return 0;
}

增加了两个命名空间,A和B,在使用的时候,直接使用A::prnt();B::print()即可调用不同的函数,就像喊小李同学一样,如果直接喊,那么不知道叫的哪个,但是如果加上一一班小李同学,那么这个时候就可以明确确定是叫谁,这个规则是一样的。

命名空间可以定义到一个文件中,也可以定义到几个文件中,即不一定是连续的文件中,这个时候只要引入即要将同样的命名空间引入。

命名空间中可以定义常量,变量,函数等,并且可以嵌套,如

cpp 复制代码
#include <iostream>
using namespace std;

namespace A {
	namespace AA{
	void prnt() { //打印A
		cout << "printA" << endl;
	}
	}
}

int main() {
	A::AA::prnt();
	return 0;
}

在A的命名空间中再定义了AA的空间,那么引入的时候,就成了A::AA::prnt()即可。

但是注意命名空间只能定义到全局,不能定义到函数中,比如

cpp 复制代码
#include <iostream>
using namespace std;

void funA()
{
	namespace A {
		namespace AA {
			void prnt() { //打印A
				cout << "printA" << endl;
			}
		}
	}
}
int main() {
	A::AA::prnt();
	return 0;
}

那么这个时候就是错误的,

这个在使用的时候注意即可。

相关推荐
丑梨数据2 分钟前
法律合同知识库怎么搭:从图片压缩到私有化 RAG 的工程笔记
开发语言·笔记·c#
小羊没烦恼!3 分钟前
TypedSql:在 C# 类型系统上实现一个 SQL 查询引擎
java·linux·运维·服务器·开发语言·数据库·mysql
FLJwu5 分钟前
运动相机采购选型避坑实战|第二篇
c语言·开发语言·数码相机·运动相机·oem 量产
诚丞成19 分钟前
Kavita真正好用的不是“远程阅读”:而是把NAS目录重新组织成可扫描的Library
开发语言·网络
Kimi-学长29 分钟前
PHP 爆出两个高危安全漏洞!CVE-2026-109618、CVE-2026-109619 修复方案与防护指南
开发语言·php
程序猿编码31 分钟前
不用 PyTorch!从零手写 C++ 深度学习框架,自动微分、CUDA、分布式一把搞定
c++·深度学习·大模型推理·自动微分
real_metrix32 分钟前
【学习笔记】C/C++ 头文件自包含
c++·c·头文件·自包含
“AI国潮设计-小江”33 分钟前
《【AIGC实战】Python+SDXL批量生成“英歌舞草莓抱抱卷蛋糕”IP插牌立牌方案,锁定角色一致性,甜品插件化落地》
开发语言·人工智能·python·prompt·aigc
雪落漂泊34 分钟前
C++算法 滑动窗口篇(上)
开发语言·c++·算法
像枫一样35 分钟前
STM32串口轮询收发实战教程
arm开发·c++·stm32·单片机·嵌入式硬件·fpga开发·51单片机