【C++】命名空间
1.【C++】const与constexpr2.【C++】vector3.【C++】创建对象写法4.【C++】域作用符的作用5.【C++】map6.【C++】类7.【C++】NULL与nullptr的区别8.【C++】cmath9.【C++】struct10.【C++】string11.【C++】unordered_set12.【C++】基本类型13.【C++】algorithm
14.【C++】命名空间
15.【C++】缺省参数16.【C++】函数重载17.【C++】引用18.【C++】auto19.【C++】基于范围for循环20.【C++】存储区21.【C++】左值与右值22.【C++】explicit23.【C++】构造函数类别24.【C++】decltype25.【C++】remove_refrence26.【C++】typeid与RTTI27.【C++】using28.【C++】引用折叠、万能引用和完美转发在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称都将作用于全局作用域中,可能会导致很多命名冲突。
使用命名空间的目的就是对标识符和名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
1、命名空间的定义
定义命名空间,需要使用到 namespace 关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。
1.1 普通定义
//命名空间的普通定义
namespace N1 //N1为命名空间的名称
{
//在命名空间中,既可以定义变量,也可以定义函数
int a;
int Add(int x, int y)
{
return x + y;
}
}
1.2 嵌套定义
//命名空间的嵌套定义
namespace N1 //定义一个名为N1的命名空间
{
int a;
int b;
namespace N2 //嵌套定义另一个名为N2的命名空间
{
int c;
int d;
}
}
1.3 同名空间
同一个工程中允许存在多个相同名称的命名空间,编译器最后会将其成员合成在同一个命名空间中,所以我们不能在相同名称的命名空间中定义两个相同名称的成员。
注意:一个命名空间就定义了一个新的作用域,命名空间中所有内容都局限于该命名空间中。
2、命名空间的使用
2.1 使用作用域限定符
符号“::”在C++中叫做作用域限定符,我们通过“命名空间名称::命名空间成员”便可以访问到命名空间中相应的成员。
//加命名空间名称及作用域限定符
#include <stdio.h>
namespace N
{
int a;
double b;
}
int main()
{
N::a = 10;//将命名空间中的成员a赋值为10
printf("%d\n", N::a);//打印命名空间中的成员a
return 0;
}
2.2 使用using将命名空间成员引入
我们还可以通过“using 命名空间名称::命名空间成员”的方式将命名空间中指定的成员引入。这样一来,在该语句之后的代码中就可以直接使用引入的成员变量了。
//使用using将命名空间中的成员引入
#include <stdio.h>
namespace N
{
int a;
double b;
}
using N::a;//将命名空间中的成员a引入
int main()
{
a = 10;//将命名空间中的成员a赋值为10
printf("%d\n", a);//打印命名空间中的成员a
return 0;
}
2.3 使用using namespace命名空间引入
最后一种方式就是通过”using namespace 命名空间名称“将命名空间中的全部成员引入。这样一来,在该语句之后的代码中就可以直接使用该命名空间内的全部成员了。
//使用using namespace 命名空间名称引入
#include <stdio.h>
namespace N
{
int a;
double b;
}
using namespace N;//将命名空间N的所有成员引入
int main()
{
a = 10;//将命名空间中的成员a赋值为10
printf("%d\n", a);//打印命名空间中的成员a
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2023-07-30 【GCC】添加运行时库路径
2023-07-30 【GCC】添加动态库搜索路径
2023-07-30 【c】可变参数传递给另一个函数