C++命名空间域
目录
前言:
命名空间域作用:
编译默认查找顺序:
a:当前局部域
b:全局域
c:命名空间域
命名空间域展开的三种方式:
1.指定访问(通过 命名空间::成员名 访问)
2.全展开(慎用,可能引发命名冲突)
3.指定展开某一个(将特定成员引入当前作用域)
命名空间的嵌套:
命名空间与作用域的关系:
前言:
在 C++ 中,命名空间(Namespace) 是一种用于组织代码、避免命名冲突的机制,而“命名空间域”可以理解为 命名空间的作用域,即在命名空间内定义的标识符(如变量、函数、类等)的可见性和访问范围。
命名空间域作用:
避免全局命名冲突:当多个库或模块定义了相同名称的标识符时(自定义和库,自定义与自定义),命名空间可以隔离它们。ps:不同域可以定义同名的变量/函数/类型
#include<iostream>
#include<cstdlib>
using namespace std;
int rand=0;
int main(){
cout<<rand;
//"cstdlib"库中的rand函数名和自定义函数名rand冲突
return 0;
}
这时我们就可以利用命名空间域的知识优化代码,这里有涉及编译默认查找顺序
#include<iostream>
#include<cstdlib>
using namespace std;
namespace A
{
int rand=0;
}
int main()
{
cout<<A::rand;
return 0;
}
逻辑分组:将相关的功能(如数学计算、文件操作)组织到同一命名空间中,提高代码可读性。
编译默认查找顺序:
a:当前局部域
b:全局域
ps:不会到其他命名空间查找,除非特地指定声明(例:A::rand)或者展开命名空间域
c:命名空间域
命名空间域展开的三种方式:
1.指定访问(通过 命名空间::成员名
访问)
cout<<A::rand;
2.全展开(慎用,可能引发命名冲突)
using namespace A;
3.指定展开某一个(将特定成员引入当前作用域)
using A::rand;
命名空间的嵌套:
命名空间可以多层嵌套,形成逻辑上的层次结构:
namespace A
{
namespace B
{
}
}
命名空间与作用域的关系:
-
作用域规则:命名空间内的成员仅在命名空间作用域内可见,除非通过
using
或完全限定名访问。 -
生命周期:命名空间在程序启动时创建,结束时销毁,其成员的生存期与程序一致(除非定义为局部对象)。