【浅尝C++】命名空间

【浅尝C++】命名空间_第1张图片

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


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


文章目录

  • 为什么使用命名空间
  • 定义命名空间
    • 定义命名空间的基本方法
    • 命名空间嵌套命名空间
    • 命名空间重定义
  • 命名空间的使用
    • 命名空间加作用域限定符
    • 使用using引入某个成员
    • 使用using namespace引入全部成员


为什么使用命名空间

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

#include
#include

int rand = 100;

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

【浅尝C++】命名空间_第2张图片

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

定义命名空间

定义命名空间的基本方法

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

namespace jammingpro
{
	int num = 10;
	
	void sayHello()
	{
		cout << "Hello,家人们!" << endl;
	}
	
	class XiaoMing
	{
	public:
		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);
}

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

你可能感兴趣的:(#,浅尝C++,c++,开发语言)