当前位置: 首页 > news >正文

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

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

相关文章:

  • Pi币与XBIT:在去中心化交易所的崛起中重塑加密市场
  • 专业的UML开发工具StarUML
  • 华山论剑之JAVA中的“方法论”
  • 深入剖析:基于红黑树实现自定义 map 和 set 容器
  • 【运维】内网服务器借助通过某台可上外网的服务器实现公网访问
  • 双指针2:1089. 复写零
  • #6【TIP2023】Dif-Fusion
  • CSS 真的会阻塞文档解析吗?
  • android studio 中止了一个已建立的连接
  • 线程的状态
  • 结构化需求分析SA
  • JavaWeb开发入门:从前端到后端的完整流程解析
  • vue3按钮级别权限处理,自定义指令
  • redis主从哨兵模式+Lua报错-READONLY You can‘t write against a read
  • Java之异常体系
  • Java Set实现类面试题
  • IP----访问服务器流程
  • 解密 Token:大模型如何解析中英文文本
  • 基于 Python 和 Django 的文本情感分析系统设计与实现
  • 音视频容器格式
  • 中小企业网络组网案例/147seo工具
  • 岳阳建网站/郑州网站seo公司
  • 360元网站建设/软文新闻发稿平台
  • 建e网app下载链接/厦门seo报价
  • wordpress同步发布/优化设计单元测试卷
  • 在线代理入口/杭州百家号优化