【浅尝C++】命名空间

在这里插入图片描述

🎈归属专栏:浅尝C++
🚗个人主页:Jammingpro
🐟记录一句:写这篇博客好困,真的好困


文章前言:本篇文章介绍C++中的命名空间,每个介绍的小点,在可能的情况下,都附上代码了。



为什么使用命名空间

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

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

int rand = 100;

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

在这里插入图片描述

上述代码运行之后会报错,因为这里定义的全局变量rand和stdlib头文件中的rand函数重名了。为了解决重名的问题,C++隆重推出命名空间,也就是namespace,以解决这个问题。

定义命名空间

定义命名空间的基本方法

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。命名空间里可以放变量、函数、类型(也就是类、结构体等)。看看下面的代码示例👇

namespace jammingpro
{
	int num = 10;
	
	void sayHello()
	{
		cout << "Hello,家人们!" << endl;
	}
	
	class XiaoMing
	{
	public:
		void setName(string& name)
		{
			m_name = name;
		}
		string& getName()
		{
			return m_name;
		}
	private:
		string m_name;
	};
	
	struct Node
	{
		int val;
		Node* next;
	};
}

命名空间嵌套命名空间

类似于if语句里面嵌套if语句,下面看看怎么嵌套命名空间👇

namespace outlayer
{
	int num = 1;
	namespace innerlayer
	{
		int val = 0;
	}
}

命名空间重定义

如果在一个工程下定义多个同名的命名空间,编译器会合并成一个命名空间。如果我在jammingpro.h中定义了命名空间xiaoming,在jammingpro.cpp中又定义了命名空间xiaoming,就像下面这样👇
jammingpro.h中的代码片段

namespace xiaoming
{
	int nice = 1;
}

jammingpro.cpp中的代码片段

namespace xiaoming
{
	int re = 0;
}

在我们编译之后,就会被合并到一起,也就是这样的👇

namespace xiaoming
{
	int nice = 1;
	int re = 0;
}

命名空间的使用

上面只介绍了怎么定义名称空间,那么名称空间又该怎么使用呢?下面介绍了3种使用名称空间的方法。为了方便下面的介绍,这里先给出我定义的命名空间👇

namespace xiaoming
{
	int num = 1;
	int re = 0;
}

命名空间加作用域限定符

下面用到的::就是作用域限定符,作用域限定符前为命名空间的名字,后面为要使用变量、函数或类型。

int main()
{
	printf("%d and %d\n", xiaoming::num, xiaoming::re);
	return 0;
}

使用using引入某个成员

如果xiaoming中的num经常使用,那么我们可以考虑使用using引入num。这样,我们就不用每次都写上num对应的命名空间了。

using xiaoming::num;

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

使用using namespace引入全部成员

如果xiaoming这个命名空间中的很多成员都需要使用到,这时候可以使用using namespace xiaoming这个语句,这样就可以引入该命名空间中的所有成员了。

using namespace xiaoming;

int main()
{
	printf("%d and %d\n", num, re);
	return 0;
}

文章结语:这篇文章对C++中命名空间的定义和使用做了介绍。如果上述内容有任何问题,欢迎在下方留言区指正b( ̄▽ ̄)d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值