目录

前言:

命名空间域作用:

编译默认查找顺序:

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 或完全限定名访问。

  • 生命周期:命名空间在程序启动时创建,结束时销毁,其成员的生存期与程序一致(除非定义为局部对象)。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐