【C++】常用到的“using namespace std;”到底是什么?

一、引言

在初学C++时,在包含完头文件之后,我们常常会看到这么一句话:using namespace std;

比如:

#include
using namespace std;  

int main()
{
	cout << "hello world" << endl;

	return 0;
}

首先需要声明的是:它不是什么“固定动作”,不是必须这么写的。

二、命名空间

namespace,顾名思义,命名空间。

而using namespace ,则是展开命名空间。

std是C++标准库的命名空间。

因此,using namespace std,就是展开std这个命名空间。

此外,我们也可以定义自己的命名空间:

namespace jiangsu
{
	//这里定义的变量还是全局变量,放到静态区
	//命名空间可以定义变量、函数、类型
	int rand = 0;

	int Sub(int x, int y)
	{
		return x - y;
	}

	struct Node
	{
		struct Node* next;
		int val;
	};

}

同时,命名空间是可以嵌套定义的:

namespace jiangsu
{	
//这里定义的变量还是全局变量,放到静态区
	//命名空间可以定义变量、函数、类型
	int rand = 0;

	int Sub(int x, int y)
	{
		return x - y;
	}

	struct Node
	{
		struct Node* next;
		int val;
	};

	namespace N
	{
		int m;
		int n;
		int Add(int x, int y)
		{
			return x + y;
		}
	}
}

部分展开

using namespace std; 这种就是完全展开,那么就会产生一个弊端:我们在定义或使用某一变量或方法时,会产生一些问题,比如命名冲突等。

此时,我们就需要知道一个东西——“::”

三、域作用限定符(::)

#include

using namespace std;

#include
#include

namespace jiangsu
{
	//这里定义的变量还是全局变量,放到静态区
	//命名空间可以定义变量、函数、类型
	int rand = 0;

	int Sub(int x, int y)
	{
		return x - y;
	}

	struct Node
	{
		struct Node* next;
		int val;
	};

	namespace N
	{
		int m;
		int n;
		int Add(int x, int y)
		{
			return x + y;
		}
	}
}

int a = 0;

//可以展开某一个   展开命名空间常用的
using jiangsu::Sub;

int main()
{
	jiangsu::rand = 100;
	printf("%d \n", jiangsu::rand);//    ::    -    域作用限定符


	int a = 1;

	printf("%d\n", a);
	printf("%d\n", ::a);  //左边是空格,表示从全局域找

	int ans = jiangsu::Sub(4, 2);
	printf("%d\n", ans);

	struct jiangsu::Node node;

	ans = jiangsu::N::Add(7, 8);
	printf("%d\n", ans);

	return 0;
}

【C++】常用到的“using namespace std;”到底是什么?_第1张图片

 

你可能感兴趣的:(C++,c++,算法,开发语言)