【C++】命名空间

一.为什么要使用命名空间???

     我们知道在C++中,变量,函数和类都是大量存在的,这些变量,函数和类的名称都存在于全变量命名中,会导致很多冲突,从而在C++中我们使用命名空间来避免这种冲突。命名空间中namespace是关键字。

二.命名空间的定义

1.

//普通的命名空间
namespace N        //N为命名空间的名称
{


	//命名空间中的内容,既可以定义变量也可以定义函数
	int a = 10;
	int b = 30;

	int Add(int left, int right)
	{

		return left + right;
	}

	int Sub(int left, int right)
	{

		return left - right;
	}


}

//命名空间可以嵌套
namespace N1
{
	int a = 50;
	int c = 50;
	int A = N::a;
	int Mul(int left, int right)
	{

		return left * right;

	}

}

2.特殊的是在同一个工程中可能会存在同一个名称相同的命名空间,这时候编译器会将他们整合在一起为一个命名空间。

namespace N1
{
	int a = 50;
	int c = 50;
	
	int Mul(int left, int right)
	{

		return left * right;

	}

}


namespace N1
{
	int d = 5;
	int e = 5;
	int Div(int left, int right)
	{

		return left / right;

	}


}
using namespace N1;
int main()
{


	cout << N1::a << endl;
	cout << N1::d << endl;

	cout<<N1::
	cout << N1::Div(10,2) << endl;
	cout << Mul(10, 10) << endl;
	system("pause");
	return 0;
}

  

从上边的代码我们可以很清楚的看出两个N1名称相同可以调用其中的内容

3.没有名称的命名空间

namespace
{
	int g = 6;
	int f = 3;

	int sub(int left, int right)
	{
		return left - right;
	}

}

没有名称的命名空间,他的成员只在声明该命名空间的文件中可以访问,访问时不需加命名空间名称,对其他文件该命名空间内容不可见。

因为在访问时其中内容时必须是空间命名名称+::(作用域限定符)(但是在没有名称的命名空间中因为没有名称所以没法在其他文件中访问)

【说明】:本质上讲,一个命名空间就定义了一个范围,在命名空间中定义的任何东西都局限于该命名空间中。没有名称的命名空间可以创建只在声明它的文件中才可见的标识符。也就是说,只有在声明这个命名空间的文件中,它的成员才是可见的,它的成员才可以被直接访问,不需要命名空间名称来修饰。对于其他文件,该命名空间是不可见的。把全局名称的作用域限制在声明他的文件中的一种方式就是把它的声明为静态的,尽管C++支持全局静态,但最好的方式还是使用未命名的空间。

三.访问空间命名的两种方式

1.使用using  namespace +命名空间名称

using namespace N1;
int main()
{



	cout << N1::a << endl;
	cout << N1::d << endl;

	
	cout << N1::Div(10,2) << endl;
	cout << Mul(10, 10) << endl;

	system("pause");
	return 0;
}

2.命名空间的名称 + ::+ 变量名称或者函数

int main()
{
        N1::a = 0;

	cout << "a=" << N1::a << endl;


	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/alidada_blog/article/details/81238775