news 2026/5/12 15:30:16

05 C++语言---作用域和命名空间

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
05 C++语言---作用域和命名空间

4.1 作用域

作用域描述的是在C++中变量、常量、函数的使用范围

作用域一般有一下几种:

1、全局作用域

​ 在全局作用域中,我们定义的函数或者是数据都是全局可见的,在整个项目中都可以调用和使用。一般的声明和定义都是在命名空间之外。一般全局变量需要定义在CPP文件中,如果定义在头文件中,那么在引入的时候会出现重复定义的问题。

2、命名空间作用域

​ 命名空间作用域中的函数和数据只能在相应的命名空间中使用,如果在全局作用据中调用则无法使用,会报未定义错误。

3、类作用域

​ 此作用域从名字上就可以看出来是在类中定义的函数和数据,当然在此作用域的数据也只能在类中使用,在类中的函数被称为成员函数,数据称为成员数据(成员变量)。

4、函数作用域

​ 函数作用域说是的就是在函数中定义的数据,这里也包括函数的形参,此作用域中的形参或者在函数中定义的变量都只能在此函数中使用。

5、块作用域:块作用域指的是在一组大括号中的范围,这个范围中声明的变量作用域就是块作用域。

4.2 命名空间

命名空间的引入是为了解决不同库之间出现相同的函数,产生二义性。导致程序无法编译无法运行的问题。

他可以作为附加信息来区分不同库中相同名称的函数、类、变量等。命名空间就是定义一个范围。

命名空间的使用:

命名空间的定义关键字是namespace,后面跟的就是命名空间的名称。

namespace test { class ClassEximple; }

以上就是定义了一个命名空间test,将类ClassEximple这个类放到test命名空间中声明。这样在以后使用的过程中如果调用函数或变量,需要在前面加上命名空间的名称。

命名空间可以像头文件一样进行引用,当命名空间引入之后就在调用的时候可以不适用命名空间的名字进行限定,需要注意的如果这里引入的两个命名空间,两个命名空间有重复的函数或者数据,还是需要使用命名空间限定的,不然还是会产生二义性的。

命名空间的引用:

using namespace命名空间的名称,这样在使用命名空间时就可以不用在前面加上命名空间的名称。这个指令会告诉编译器,后续的代码将使用指定的命名空间中的名称。

例如

using namespace std;

以上就是引入的std标准库的命名空间。

特性:

命名空间的定义是可以叠加的,就是当你在一个文件中使用了命名空间,并将类A添加到命名空间,在另一个文件中也进行定义同名的命名空间,并将类B添加到命名空间中。这是命名空间就包含两个类的数据和函数。

例如

namespace test { class 类A; } namespace test { class 类B; } 这个时候命名空空间,test中就包含了类A的元素和类B的元素。

需要获取命名空间中类的函数的时候可以使用"::"符号进行限定,例如:

test::类A //这就是指定使用类A的元素,后面可以是数据类型。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 15:28:45

Docker容器化ROS开发:跨平台环境搭建与GUI应用实战

1. 为什么需要Docker容器化ROS开发? 第一次接触ROS开发的朋友,十有八九会在环境配置上栽跟头。我至今记得三年前在Ubuntu 18.04上折腾ROS Melodic的经历——因为系统依赖冲突导致编译失败,重装系统三次才搞定。更不用说同时维护ROS1和ROS2项目…

作者头像 李华
网站建设 2026/5/12 15:30:06

Aircrack-ng实战指南:从扫描到破解的完整流程

1. 认识Aircrack-ng:无线安全测试的瑞士军刀 第一次接触Aircrack-ng是在2013年的一次网络安全培训中。当时讲师用这个工具在30秒内破解了演示用的WiFi密码,全场哗然。Aircrack-ng本质上是一套用于评估WiFi网络安全的工具集,就像外科医生的手术…

作者头像 李华
网站建设 2026/4/14 21:59:49

SaaS 对制造业的优势

制造业正经历重大转型,其驱动力是对敏捷性、效率的需求,以及在快速变化的环境中保持竞争力。一种能够赋能制造企业直面这些挑战的强大解决方案,是开发专为其独特需求量身定制的软件即服务(SaaS)解决方案。在本文中&…

作者头像 李华