C++ 命名空间详解

目录

引入例子

命名空间的定义

命名空间的使用

命名空间使用注意事项


引入例子

#include <stdio.h>
#include <stdlib.h>int rand = 10;int main()
{printf("%d\n", rand);return 0;
}

当我们用C语言写下这样的代码,看着并没有什么语法问题,但是当编译时,就会出现这样的报错:

经过查询后才发现,原来 rand 是一个库函数我们并不能使自己的变量名与之相同。

这可麻烦了,到了工作时,我们面对海量的代码,势必会有各种各样相同的变量名字或函数名造成命名冲突,我们总不能一个一个改过去吧,那么有什么办法可以解决这一问题呢?

答案是肯定的,这就是接下来要讲到的命名空间(namespace)。

命名空间的定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员(类似于结构体的样子);

//该命名空间的名字为hxy(花想云)
namespace hxy
{//定义自己的变量、函数等int rand = 10;void qsort(int* a, int n){//...}struct Node{int val;struct Node* next;//...};
}

命名空间可以嵌套;

namespace hxy
{int rand = 10;namespace hxy2{int rand = 20;namespace hxy3{//....}}
}

同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

//test.cpp中定义
namespace hxy
{int rand = 10;void qsort(int* a, int n){//...}struct Node{int val;struct Node* next;//...};
}
//test.h中定义
namespace hxy
{int sum = 0;int add(int a, int b){//...}
}//两个hxy会被合并成为一个

 一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。

命名空间的使用

命名空间的使用有 3 种方式:

加命名空间名称及作用域限定符(::);

namespace hxy
{int rand = 10;void qsort(int* a, int n){//...}struct Node{int val;struct Node* next;//...};
}int main()
{printf("%d\n", hxy::rand);return 0;
}

使用using将命名空间中某个成员引入;

using  hxy::rand;int main()
{printf("%d\n",rand);return 0;
}

使用using namespace 命名空间名称引入;

using  namespace hxy;int main()
{printf("%d\n", rand);return 0;
}

命名空间使用注意事项

我们可能经常见到这样的语句:

using namespace std;

它告诉编译器在当前代码块中使用标准命名空间(namespace)std中的标识符 。

标准命名空间std是C++标准库的命名空间,包含了很多常用的函数和对象,例如输入/输出操作(cout、cin)、字符串处理、数学运算等。

使用using namespace std可以使代码更简洁易读,但可能会导致命名冲突或歧义。

实际开发项目的过程中,我们一般使用

域作用限定符访问;

#include <iostream>int main()
{//cin、cout为C++中常用的输入输出语句//end暂且可理解为作用与'\n'相同std::cout << "hello world" << std::endl;return 0;
}

部分常用展开使用;

using std::cout;
using std::endl;int main()
{cout << "hello world" << endl;return 0;
}

全局展开。

using namespace std;
int main()
{cout << "hello world" << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/201223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI助力智慧农业,基于YOLOv5全系列模型【n/s/m/l/x】开发构建不同参数量级农田场景下庄稼作物、杂草智能检测识别系统

紧接前文&#xff0c;本文是农田场景下庄稼作物、杂草检测识别的第二篇文章&#xff0c;前文是基于YOLOv3这一网络模型实现的目标检测&#xff0c;v3相对来说比较早期的网络模型了&#xff0c;本文是基于最为经典的YOLOv5来开发不同参数量级的检测端模型。 首先看下实例效果&a…

介绍一款在线文件格式转换工具

原因: 今天要将一个pdf格式的文件转为docx格式,结果我用破解版的WPS无法再不登录的情况下转换,所以就搜索了一款在线工具实现功能。 网站地址: Convertio — 文件转换器 使用流程: 1)选择要转换的文件 2)选择要转换的格式 3)点击转换 4)等待上传 5)等待转换 6)下载到本地

Linux简单部署Yearning并结合内网穿透工具发布至公网可访问

目录 前言 1. Linux 部署Yearning 2. 本地访问Yearning 3. Linux 安装cpolar 4. 配置Yearning公网访问地址 5. 公网远程访问Yearning管理界面 6. 固定Yearning公网地址 前言 Yearning 简单, 高效的MYSQL 审计平台 一款MYSQL SQL语句/查询审计工具&#xff0c;为DBA与开发…

Vue混淆与还原

Vue混淆与还原 引言 Vue是一种流行的JavaScript框架&#xff0c;用于构建用户界面。它简单易用且功能强大&#xff0c;备受开发者喜爱。然而&#xff0c;在传输和存储过程中&#xff0c;我们需要保护Vue代码的安全性。混淆是一种有效的保护措施&#xff0c;可以加密和压缩代码…

Course2-Week1-神经网络

Course2-Week1-神经网络 文章目录 Course2-Week1-神经网络1. 神经网络概述1.1 欢迎来到Course21.2 神经元和大脑1.3 引入神经网络-需求预测1.4 神经网络的其他示例-图像感知 2. 神经网络的数学表达式2.1 单层的神经网络-需求预测2.3 前向传播的神经网络-手写数字识别 3. Tensor…

学生护眼台灯怎么样选择?适合考研的护眼台灯推荐

很多家长都是为了孩子的视力健康而置换的护眼台灯&#xff0c;但是有一部分孩子用了之后反而会和家长说出现眼睛不太舒服&#xff0c;甚至近视加深的情况。而引发这种情况的大多数为产品不达标或非专业台灯&#xff0c;因为专业护眼台灯是真实能够保护眼睛的。 所以很多人都对护…

文件上传漏洞(带实例)

漏洞介绍&#xff1a; 现代互联网的Web应用程序中&#xff0c;上传文件是一种常见的功能&#xff0c;因为它有助于提高业务效率&#xff0c;如企业的OA系统&#xff0c;允许用户上传图片&#xff0c;视频&#xff0c;头像和许多其他类型的文件。然而向用户提供的功能越多&#…

【Polar靶场WEB签到】

题目&#xff1a; <?phperror_reporting(0);$file $_GET[file];if(!isset($file))$file 1;$file str_replace(../, , $file);include_once($file.".php");highlight_file(__FILE__); ?>解答&#xff1a;1、进入index页面&#xff0c;说让你加弟弟&#x…

ArcGIS平滑处理栅格数据

一、实验背景 基于栅格数据的空间分析&#xff0c;常常需要根据特定的分析场景对栅格数据进行处理&#xff0c;如栅格数据的噪声处理。噪声是属性值具有突跃特征的像元位置&#xff0c;直接对带有噪声的栅格数据进行分析会对结果造成较大的影响。而降噪的主要方法之一是平滑&a…

会议剪影 | “聚势合力 共创高峰”2023思腾合力成都客户答谢会圆满结束

2023年11月29日至12月1日&#xff0c;以“聚势合力 共创高峰”为主题的思腾合力成都答谢会&#xff0c;在成都都江堰皇冠假日酒店盛大举行&#xff0c;来自各地的客户齐聚于此&#xff0c;共同见证思腾合力的成长与突破&#xff0c;展望未来的合作与发展。 思腾合力总经理王伟热…

2024面试必备的MySQL基础初级面试文集。

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

Opencv获取当前视频长宽、总帧数、fps

Opencv提供了类似java中静态变量的参数&#xff0c;可以通过get(参数)获取当前视频的信息&#xff0c;参数类别还是挺多的&#xff0c;按照需求查手册或源码即可。 源码参数举例 获取视频帧的长宽 import cv2 if __name__ __main__:mp4_path xhx_utils/images/demo.mp4video…

【hacker送书第9期】算法训练营(入门篇)

第9期图书推荐 内容简介作者简介精彩书评图书目录概述参与方式 内容简介 本书以海量图解的形式&#xff0c;详细讲解常用的数据结构与算法&#xff0c;又融入大量的竞赛实例和解题技巧。通过对本书的学习&#xff0c;读者可掌握12种初级数据结构、15种常用STL函数、10种二叉树和…

C程序的内存布局分析

C 程序的典型内存由以下部分组成&#xff1a; 文本段&#xff08;text&#xff09;初始化数据段 &#xff08;data&#xff09;未初始化数据段&#xff08;bss&#xff09;堆 &#xff08;heap&#xff09;栈&#xff08;stack&#xff09; 典型内存布局&#xff1a; 1.文本段…

Java 控制台命令导入本地jar包到maven本地库中

1、新建POM文件&#xff0c;在maven库路径下创建POM文件 注意&#xff1a;这个路径需要与第2点导入命令中的grouoId、artifactId和version写法对应 Path&#xff1a;D:\RomanData\repository\com\sae\mail\1.0.0\mail-1.0.0.pom <?xml version"1.0" encoding&q…

基于web的ssm邮票鉴赏系统源码和论文

网络的广泛应用给生活带来了十分的便利。所以把邮票鉴赏管理与现在网络相结合&#xff0c;利用java技术建设邮票鉴赏系统&#xff0c;实现邮票鉴赏的信息化。则对于进一步提高邮票鉴赏管理发展&#xff0c;丰富邮票鉴赏管理经验能起到不少的促进作用。 邮票鉴赏系统能够通过互…

【Backbone】TransNeXt:最新ViT模型(原理+常用神经网络汇总)

文章目录 一、近几年神经网络 Backbone 回顾1.Densenet 与 Resnet2.CBP3.SENet4.GCNet5.DANet6.PANet 与 FPN7.ASPP8.SPP-net9.PSP-net10.ECA-Net 二、TransNeXt&#xff08;2023&#xff09;1.提出问题2.Aggregated Pixel-focused Attention2.1 Pixel-focused Attention&#…

Ant Design Vue(v1.7.8)a-table组件的插槽功能

<template slot"unitShow" slot-scope"text, record"> slot"unitShow" 表示插槽名&#xff08;见具名插槽&#xff09; slot-scope"text, record" 表示作用域插槽接收从<a-table>组件传递进来的两个参数&#xff0c;其中…

CentOS8下的JDK安装

一、JDK简介 &#xff08;一&#xff09;JDK、JRE、JVM、JIT 1、JDK&#xff08;Java Development kit&#xff09;&#xff0c;针对Java开发人员的产品&#xff0c;它包括了Java运行环境JRE、Java工具和Java基础类库&#xff0c;是java开发工具包。 java标准版开发工具包&am…

机器连接和工业边缘计算

软件应用和IT创新是制造业投资的主要驱动力。解决方案架构应围绕特定标准进行整合&#xff0c;并采用架构蓝图和最佳实践来满足最终用户的需求。此外&#xff0c;边缘计算&#xff08;Edge Computing&#xff09;也将在制造业中加速部署。 边缘计算是制造业的下一个变革驱动力。…