0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C++中对名字的访问

汽车玩家 来源: 黑马程序员 作者: 黑马程序员 2020-05-05 18:18 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

编写程序过程中,名称(name)可以是符号常量、变量、函数、结构、枚举、类和对象等等。工程越大,名称互相冲突性的可能性越大。另外使用多个厂商的类库时,也可能导致名称冲突。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的 C++ 库时,这些标识符的命名发生冲突,标准 C++ 引入关键字 namespace(命名空间/名字空间/名称空间),可以更好地控制标识符的作用域。

例如,我们在 C 语言中,通过 static 可以限制名字只在当前编译单元内可见,在 C++ 中我们通过 namespace 来控制对名字的访问。

1. namespace 语法

1. namespace 中可定义常量、变量、函数、结构体、枚举、类等

2. namespace 只能在全局定义。

3. namespace 支持嵌套定义。

4. namespace 是开放的,可随时添加新的成员。

5. namespace 关键字可以为已有空间名字增加别名

6. 无名命名空间意味着命名空间中的符号只能在本文件中访问,相当于给符号增加了 static 修饰。

1.1 namespace 可包含的成员

C++中对名字的访问

1.2 namespace 只能在全局定义

C++中对名字的访问

1.3 namespace 支持嵌套定义

C++中对名字的访问

名字空间 my_space 中可以嵌套定义子名字空间 my_sub_space.

1.4 namespace 是开放的,随时可添加成员

C++中对名字的访问

1.5 namespace 为已有空间名字创建别名

C++中对名字的访问

1.6 namespace 匿名名字空间

无名命名空间意味着命名空间中的符号只能在本文件中访问,相当于给符号增加了 static 修饰,只能在当前文件内访问。

C++中对名字的访问

2. 使用 namespace 中符号

使用名字空间中定义的符号有三种方式:

1. 直接通过 namespace 作用域访问

2. using 声明指定某个符号在某个作用域下可见

3. using 编译指令指定名字空间中所有符号在在某个作用域下可见

2.1 直接访问

C++中对名字的访问

2.2 using 声明

using 声明指定某个符号在某个作用域下可见。例如:

C++中对名字的访问

2.3 using 编译指令

using 编译指令指定名字空间中所有符号在在某个作用域下可见。

C++中对名字的访问

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    183

    文章

    7642

    浏览量

    144699
  • 编译
    +关注

    关注

    0

    文章

    689

    浏览量

    34962
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CC++之间的联系

    1、语法兼容性: C++完全兼容C语言的语法,这意味着任何有效的C语言程序都可以直接在C++编译器下编译通过。 2、底层控制: C++
    发表于 12-11 06:51

    C语言和C++之间的区别是什么

    区别 1、面向对象编程 (OOP): C语言是一种面向过程的语言,它强调的是通过函数将任务分解为一系列步骤进行执行。 C++C语言的基础上扩展了面向对象的特性,支持类(class)、封装、继承
    发表于 12-11 06:23

    C++程序异常的处理机制

    1、什么是异常处理? 有经验的朋友应该知道,在正常的CC++编程过程难免会碰到程序不按照原本设计运行的情况。 最常见的有除法分母为零,数组越界,内存分配失效、打开相应文件失败等等。 一个程序
    发表于 12-02 07:12

    C/C++代码静态测试工具Perforce QAC 2025.3的新特性

     Perforce Validate  QAC 项目的相对/根路径的支持。C++ 分析也得到了增强,增加了用于检测 C++ 并发问题的新检查,并改进了实体名称和实
    的头像 发表于 10-13 18:11 370次阅读
    <b class='flag-5'>C</b>/<b class='flag-5'>C++</b>代码静态测试工具Perforce QAC 2025.3的新特性

    技能+1!如何在树莓派上使用C++控制GPIO?

    和PiGPIO等库,C++可用于编程控制树莓派的GPIO引脚。它提供了更好的性能和控制能力,非常适合对速度和精度要求较高的硬件项目。在树莓派社区,关于“Python
    的头像 发表于 08-06 15:33 3651次阅读
    技能+1!如何在树莓派上使用<b class='flag-5'>C++</b>控制GPIO?

    主流的 MCU 开发语言为什么是 C 而不是 C++

    在单片机的地界儿里,C语言稳坐中军帐,C++想分杯羹?难喽。咱电子工程师天天跟那针尖大的内存空间较劲,C++那些花里胡哨的玩意儿,在这儿真玩不转。先说内存这道坎儿。您当stm32f4的256kRAM
    的头像 发表于 05-21 10:33 792次阅读
    主流的 MCU 开发语言为什么是 <b class='flag-5'>C</b> 而不是 <b class='flag-5'>C++</b>?

    如何从 Microsoft Visual C++ 应用程序 (CyAPI.h) 访问 CYUSB3014 芯片组的 i2c 接口?

    1. 如何从 Microsoft Visual C++ 应用程序 (CyAPI.h) 访问 CYUSB3014 芯片组的 i2c 接口? 我在定制相机中使用 CYUSB3014。 当我开发我的相机
    发表于 05-19 07:21

    使用C++的CyAPI编写的应用程序上遇到了问题,求解决

    我在使用 C++ 的 CyAPI 编写的应用程序上遇到了问题。 我将 XferData() 方法与其他所有端点类型一起使用,没有遇到任何问题。 但是,将其与 Endpoint0 一起使用会引发
    发表于 05-13 06:11

    创建了用于OpenVINO™推理的自定义C++和Python代码,从C++代码获得的结果与Python代码不同是为什么?

    创建了用于OpenVINO™推理的自定义 C++ 和 Python* 代码。 在两个推理过程中使用相同的图像和模型。 从 C++ 代码获得的结果与 Python* 代码不同。
    发表于 03-06 06:22

    基于OpenHarmony标准系统的C++公共基础类库案例:ThreadPoll

    1、程序简介该程序是基于OpenHarmony标准系统的C++公共基础类库的线程池处理:ThreadPoll。本案例完成如下工作:创建1个线程池,设置该线程池内部有1024个线程空间。启动5个线程
    的头像 发表于 02-10 18:09 623次阅读
    基于OpenHarmony标准系统的<b class='flag-5'>C++</b>公共基础类库案例:ThreadPoll

    从Delphi、C++ Builder和Lazarus连接到MySQL数据库

      从 Delphi、C++ Builder 和 Lazarus 连接到 MySQL 数据库 MySQL 数据访问组件(MyDAC)是一个组件库,提供从 Delphi 和 C++ Builder
    的头像 发表于 01-20 13:47 1359次阅读
    从Delphi、<b class='flag-5'>C++</b> Builder和Lazarus连接到MySQL数据库

    从Delphi、C++ Builder和Lazarus连接到Oracle数据库

    从 Delphi、C++ Builder 和 Lazarus 连接到 Oracle 数据库 Oracle 数据访问组件 (ODAC) 是一个组件库,它为 32 位和 64 位平台提供从 Delphi
    的头像 发表于 01-15 10:01 1381次阅读

    Spire.XLS for C++组件说明

    Spire.XLS for C++ 是一款专业的 C++ Excel 组件,可以用在各种 C++ 框架和应用程序。Spire.XLS for C+
    的头像 发表于 01-14 09:40 1320次阅读
    Spire.XLS for <b class='flag-5'>C++</b>组件说明

    EE-112:模拟C++的类实现

    电子发烧友网站提供《EE-112:模拟C++的类实现.pdf》资料免费下载
    发表于 01-03 15:15 0次下载
    EE-112:模拟<b class='flag-5'>C++</b><b class='flag-5'>中</b>的类实现

    AKI跨语言调用库神助攻C/C++代码迁移至HarmonyOS NEXT

    )开发框架。它极大地简化了JS与C/C++之间的跨语言访问,为开发者提供了一种边界性编程体验友好的解决方案。通过AKI,开发者可以使用让代码更易读的语法糖,实现JS与C/
    发表于 01-02 17:08