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

C/C++ 匿名namespace和有名namespace的区别

C/C++ 匿名namespace和有名namespace的区别

  • 命名
  • 作用域
  • 命名冲突
  • 使用场景
  • 代码示例
    • 匿名命名空间
    • 有名命名空间

命名

匿名命名空间:没有名字,定义方式为 namespace { … }。
有名命名空间:有名字,定义方式为 namespace Name { … }。

作用域

匿名命名空间:其内容仅在定义它的翻译单元(通常是单个源文件)中可见。这意味着匿名命名空间中的变量和函数具有内部链接(internal linkage),不会与其他文件中的同名实体冲突1。
有名命名空间:其内容可以在多个翻译单元中使用,通过 using 语句或直接引用命名空间名来访问。

命名冲突

匿名命名空间:有效避免命名冲突,因为其内容对外部不可见。
有名命名空间:需要注意避免与其他命名空间或全局命名空间中的同名实体冲突。

使用场景

匿名命名空间:适用于定义仅在当前文件中使用的变量、函数或类,增强封装性和模块化。
有名命名空间:适用于需要在多个文件中共享的代码,便于组织和管理大型项目。

代码示例

匿名命名空间

namespace {
    int internalVar = 42;
    void internalFunction() {
        // 仅在当前文件中可见
    }
}

有名命名空间

namespace MyNamespace {
    int sharedVar = 42;
    void sharedFunction() {
        // 可以在其他文件中通过 MyNamespace::sharedFunction() 访问
    }
}

总结来说,匿名命名空间主要用于封装和隐藏实现细节,避免命名冲突,而有名命名空间则用于组织和管理可以在多个文件中共享的代码。


http://www.kler.cn/a/443127.html

相关文章:

  • 计算机网络期末复习(知识点)
  • Taro+react 开发第一节创建 带有redux状态管理的项目
  • 现代企业架构白皮书(可以在线阅读完整PDF文件)
  • EasyExcel的应用
  • 何为“正则表达式”!
  • MMDetection框架下的常见目标检测与分割模型综述与实践指南
  • 面试小札:闪电五连鞭_5
  • tryhackme-Pre Security-Defensive Security Intro(防御安全简介)
  • Parcel 常用插件:增强功能与性能的最佳选择
  • ASRPRO学习笔记二之语音控制LED亮灭
  • 鸿蒙操作系统简介
  • git 怎么删除一个远程分支
  • 代理IP与生成式AI:携手共创未来
  • 操作系统里的算法
  • k8s存储卷和动态创建pv
  • GaussDB 企业版轻量化部署探索(二)
  • 准备写一个内网穿透的工具
  • Redis--高并发分布式结构
  • Blazor(.razor)+VUE+elementUI适合一起用吗
  • ArcGIS地理空间平台manager存在任意文件读取漏洞
  • 开源流程引擎技术
  • SSM餐厅点餐系统--02635(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫、APP、小程序、C#、C++、python、数据可视化、大数据、全套文案
  • 【OceanBase 诊断调优】—— OceanBase 数据库网络速率配置方案
  • 一个初始化bitmap的小算法
  • flask_sqlalchemy event监听查询事件
  • 【排序算法】——选择排序