C++ ——命名空间namespace

embedded/2024/12/27 11:37:39/

介绍

        一般情况下,如果c++中出现两个变量、函数名、类名完全相同时,就会产生冲突。解决命名冲突的办法传统的做法是重新使用不同的标识符。但又是这样做有时反而降低程序的可读性,因此c++提供了第二种解决命名冲突的方法——命名空间。将这些名字相同的变量、函数和类定义在不同的命名空间中,问题就解决了。需要注意的是,同一个命名空间中标识符须是唯一的。

例如:XX和YY都定义了一个全局变量 fp,用来指明当前打开的文件,将他们的代码整合在一起编译时,编译器会提示 fp 重复定义( Redefinition)错误。为了解决合作开发时的命名冲突问题, C++ 引入了命名空间( Namespace) 的概念。

格式

定义格式:

namespace 命名空间标识符名
{}

例子

在 main() 函数中声明命名空间 std,它的作用范围就位于 main() 函数内部,如果在其他函数中又用到了 std,就需要重新声明,请看下面的例子:

namespace XX{ //XX的变量定义FILE fp = NULL;
}
namespace YY{ /YY的变量定义FILE fp = NULL
}

使用变量、函数时要指明它们所在的命名空间。以上面的 fp 变量为例,可以这样来使用:

XX::fp = fopen("X_read.txt", "r"); //使用XX定义的变量 fp
YY::fp = fopen("Y_read.txt", "rb+"); //使用YY定义的变量 fp

注意:::称为域解析操作符,在 C++中用来指明要使用的命名空间。
 

除了直接使用域解析操作符,还可以采用 using 关键字声明:

#include <iostream>void func()
{//必须重新声明using namespace std; cout<<"this is test fun"<<endl; 
}int main()
{//声明命名空间 stdusing namespace std; cout<<"this is test"<<endl;func(); return 0; 
}

大多数代码中将 std 直接声明在所有函数外部,这样虽然使用方便,但在中大型项目开发中是不被推荐的,这样做增加了命名冲突的风险,这里推荐在函数内部声明 std。


http://www.ppmy.cn/embedded/149162.html

相关文章

NFC 碰一碰发视频源码搭建技术详解,支持OEM

一、引言 NFC&#xff08;Near Field Communication&#xff09;近场通信技术以其便捷性和安全性在现代移动应用中得到了广泛应用。结合视频播放功能&#xff0c;实现 NFC 碰一碰发视频的应用场景&#xff0c;能够为用户带来全新的交互体验&#xff0c;例如在商场的产品推广、景…

【从算法小白到 csp-j 一等 第一节】枚举 + 模拟

【从算法小白到 csp-j 一等 第一节】枚举 模拟 内容提要1.枚举1.1枚举的定义1.2 [NOIP1998 普及组] 三连击&#xff08;1.00s&#xff0c;64.00MB&#xff09;题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 解法 1.3 平面上的最接近点对&#xff08;1.00s&a…

主从复制架构介绍和主从复制配置案例

每一个数据库的业务都对应着一个前端的业务&#xff0c; 主从复制架构的必要性? 第一点是两个服务器如果有一台服务器出现故障&#xff0c;那么另一台服务器可以正常工作&#xff0c;以保障前端业务可以被正常访问&#xff0c;第二点是两个服务器可以共同去处理数据&#xff…

智能眼镜_AI眼镜基于紫光展锐W517方案定制开发

AI眼镜的国产方案搭载紫光展锐的W517穿戴芯片&#xff0c;该芯片采用12纳米制程技术&#xff0c;采用了1A752.0GHz和3A551.8GHz的大小核架构&#xff0c;配合无级变速系统调度与先进的3D SiP高集成技术&#xff0c;使得整体电路板尺寸较前一代产品缩小了40%。其高阶EPOP封装设计…

【java面向对象编程】第九弹----抽象类、接口、内部类

笔上得来终觉浅,绝知此事要躬行 &#x1f525; 个人主页&#xff1a;星云爱编程 &#x1f525; 所属专栏&#xff1a;javase &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 一、抽象类 1.1基本介绍 &…

flink-1.16 table sql 消费 kafka 数据,指定时间戳位置消费数据报错:Invalid negative offset 问题解决

1 背景 1.使用 flink-1.16 的 table sql 消费 kafka数据&#xff0c;并使用 sql 计算指标&#xff0c;然后写入 doris&#xff1b; 2.指标计算时&#xff0c;需要统计当日数据条数&#xff0c;考虑到作业异常退出被重新拉起时&#xff0c;需要从零点开始消费&#xff0c;所以…

虚幻引擎结构之UWorld

Uworld -> Ulevel ->Actors -> AActor 在虚幻引擎中&#xff0c;UWorld 类扮演着至关重要的角色&#xff0c;它就像是游戏世界的总指挥。作为游戏世界的核心容器&#xff0c;UWorld 包含了构成游戏体验的众多元素&#xff0c;从游戏实体到关卡设计&#xff0c;再到物…

ffmpeg源码分析(九)解协议

本文将聚焦于FFmpeg协议处理模块&#xff0c;以avformat_open_input函数为核心&#xff0c;详细剖析其在最新FFmpeg源码中的实现。 音视频处理流程简介 avformat_open_input概述 avformat_open_input是FFmpeg用于打开输入多媒体数据的关键函数。它通过统一的接口处理多种协议…