欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++的名字空间

程序员文章站 2022-06-23 18:07:32
...

名字空间主要用于解决名字冲突的问题,应用程序可能会调用多个库程序,不同的库程序可能会存在相同的全局变量名,全局函数名,类名等。库程序的作为了避免其他程序中名字或者用户自定义的名字冲突,将库程序中的所有名字放在一个特定的名字空间下。 这样一个标识符可以在不同的名字空间使用,提高了标识符的利用率。

  1. 名字空间的引入
namespace 空间名
{
	成员;
} 
  1. 名字空间的用法
前缀用法  空间名::成员 <==> spaceName::member 
省略用法	 using namespace 空间名;<==> using namespace spaceName;
		 成员 					<==> member;

例如:
namespace A
{
	int a = 10;
}/*定义一个名字空间A,有一个成员变量a */ 
如果想要引用变量a可以由两种方法:
printf(" %d \n", A::a);
using namespace A;  printf(" %d \n", a); 

C++的名字空间

  1. 名字空间的分类
3.1自定义名字空间 
如果自己编写库程序且用自己定义的名字空间,则无论是在.cpp的源程序中编写库函数还是在.h的头文件中对库函数进行声明,都需要在指定的名字空间下进行。
用法:
namespace 名字空间
{
	名字的定义或者声明;
}
3.2 无名名字空间 
如果定义某个名字时,没有纳入某个指定的名字空间,则默认放在无名名字空间下。 
"mylib.h"文件 			|| "mylib.cpp"源码 
#ifndef _MYLIB_H_		|| #include <iostream>
#defien _MYLIB_H_		|| using namespace std;
namespace WH			|| namespace WH
{						|| {
	void f();			||		void f(){
	void g();			|| 		cout << "WH::f()" <<endl;
} 						||		} 
#endif 					||		void g(){
						||		cout << "WH::g()" <<endl;
						||		}
						|| }/*在名字空间中定义函数*/ 
						||
=============================================================================
"main.cpp"主函数  
using namespace std;
#include <iostream>
#include "mylib.h"
using namespace WH;/*用using语句包含名字空间,可以利用省略前缀的用法*/ 

void f()
{
	cout << "::f()" <<endl;
}/*全局函数:无名名字空间定义的函数*/ 

int main()
{
	::f();/*调用无名名字空间的f()函数,输出 ::f() */
	WH::f();/*调用WH名字空间的函数,输出 WH::f()*/ 
	//f();//错误用法:无名名字空间下可以使用省略用法,WH名字空间在这里用了using语句进行了声明,也可以使用省略用法,因此会产生歧义。 
	g();/*调用名字空间WH下的函数,此处对名字空间进行了声明,同时没有名字冲突。*/
	return 0;
}
  1. 名字空间的嵌套
    C++的名字空间