C++的名字空间
程序员文章站
2022-06-23 18:07:32
...
名字空间主要用于解决名字冲突的问题,应用程序可能会调用多个库程序,不同的库程序可能会存在相同的全局变量名,全局函数名,类名等。库程序的作为了避免其他程序中名字或者用户自定义的名字冲突,将库程序中的所有名字放在一个特定的名字空间下。 这样一个标识符可以在不同的名字空间使用,提高了标识符的利用率。
- 名字空间的引入
namespace 空间名
{
成员;
}
- 名字空间的用法
前缀用法 空间名::成员 <==> 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);
- 名字空间的分类
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;
}
- 名字空间的嵌套
上一篇: 画图工具怎么画简笔画效果的雪人?