初识C++之命名空间(namespace)

初识C++之入门 命名空间(namespace)

文章目录

  • 初识C++之入门 命名空间(namespace)
    • 1.为什么要有命名空间
    • 2. 命名空间 namespace使用方法
    • 3. 作用域限定符(::)和 命名空间(namespace)
    • 4. 命名空间的定义
    • 5. 命名空间的嵌套
    • 6. 命名空间的使用
    • 7. 总结

1.为什么要有命名空间

  在C/C++中,变量和函数如果大量存在,变量和函数都存放在全局作用域中,可能会导致命名冲突。其次,在一个多人合作的项目中,也可能出现相同的变量名,这就是为什么要有命名空间,使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染

例如:

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

运行结果
在这里插入图片描述

解释;
在C++中rand是一个函数,其实再定义一个rand变量时,就会出现命名冲突,在C语言中,没有办法解决,所以在C++中提出了命名空间 namespace解决

2. 命名空间 namespace使用方法

  在使用命名空间 namespace之前,先来介绍一下在编译默认的查找顺

  1. 当前局部作用域 (也就是在同一个花括号)
  2. 全局作用域 (也就是不被花括号 括起来的)
  3. 如果有展开命名空间则去命名空间找(并不是存在命名空间就会去找)

了解了以上就可以开始使用 namespace

3. 作用域限定符(::)和 命名空间(namespace)

  1. 可以通过作用域限定符(::)来访问全局变量

例1:

#include <iostream>int a = 20;int main()
{int a = 10;printf("%d\n", a);   //访问局部变量的aprintf("%d\n", ::a); //访问全局变量的areturn 0;
}

代码运行结果:
10
20

解释:
在不同作用域中可以存在相同名称的变量,当时在局部作用域中访问相同名称的变量时,遵循局部优先原则,会优先访问局部变量,但是在前面加上作用域限定符(::)即可访问全局变量

4. 命名空间的定义

可以通过作用域限定符(::)来访问命名空间(namespace)中的变量

例2:

#include <iostream>namespace test 
{int rand = 10;int Add(int x, int y){return x + y;}struct student{char name[10];int age;float score;};
}int main()
{printf("%p\n", rand);   //由于在C++中 rand 是一个库函数,所以使用%p打印地址printf("%d\n", test::rand); //在作用域限定符(::)前加上命名空间名则可访问printf("%d\n", test::Add(1, 3));return 0;
}

解释:
test是命名空间名
在命名空间中可以定义变量,函数以及类型

TIPS:如果在同一个工程文件中存在相同名称的命名空间,在编译时则会合并和一个命名空间

5. 命名空间的嵌套

如果出现命名空间名也重复的情况下,则可以嵌套命名空间
例3:

#include <iostream>namespace Lin
{namespace test{int rand = 10;int Add(int x, int y){return x + y;}struct student{char name[10];int age;float score;};}}int main()
{printf("%p\n", rand);printf("%d\n", Lin::test::rand);printf("%d\n", Lin::test::Add(1, 3));return 0;
}

6. 命名空间的使用

1. 通过命名空间名加域作用限定符

#include <iostream>namespace test
{int a = 20;
}int main()
{printf("%d\n",test::a);return 0;
}

代码运行结果:
20

2. 使用using展开部分命名空间

#include <iostream>namespace test
{int a = 20;int b = 30;
}using test::b;int main()
{printf("a = %d\n",test::a);printf("b = %d\n",b);return 0;
}

代码运行结果:
a = 20
b = 30

3. 使用using展开全部命名空间

#include <iostream>namespace test
{int a = 20;int b = 30;
}using namespace test;int main()
{printf("a = %d\n", test::a);printf("b = %d\n", b);return 0;
}

7. 总结

1. 在编译时,会优先查找局部作用域,其次是全局作用域,如果存在展开的命名空间,也会去命名空间找 2. 命名空间中可以定义变量,函数以及类型 3. 命名空间可以使用命名空间名 + 作用域限定符使用,也可以通过using先展开命名空间的部分或全部使用

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

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

相关文章

Git命令上传本地项目至github

记录如何创建个人仓库并上传已有代码至github in MacOS环境 0. 首先下载git 方法很多 这里就不介绍了 1. Github Create a new repository 先在github上创建一个空仓库&#xff0c;用于一会儿链接项目文件&#xff0c;按照自己的需求设置name和是否private 2.push an exis…

N5230A安捷伦N5230A网络分析仪

181/2461/8938产品概述&#xff1a; Agilent N5230A 网络分析仪提供了速度和精度的卓越组合&#xff0c;用于测量多端口和平衡组件&#xff0c;例如高达 50 GHz 的滤波器、双工器和射频模块&#xff08;取决于选件&#xff09;。Agilent N5230A 分析仪的自动端口扩展功能可自动…

zabbix自定义监控进程、日志文件

zabbix自定义监控进程、日志文件 zabbix自定义监控进程 在客户端安装httpd服务 [rootnode1 ~]# yum -y install httpd [rootnode1 ~]# systemctl start httpd [rootnode1 ~]# ss -antl State Recv-Q Send-Q Local Address:Port Peer Address:Port Pr…

filebox在线文件管理工具V1.11.1.1查分吧修改自用版免费分享[PHP]

* 基于:https://down.chinaz.com/soft/35899.htm * 查分吧 修改自用版今日对外分享(自2016年1.10版本以来一直用他云开发:Web环境即时看效果) * 也可以用于本人很多txt/csv通用查询系统的在线管理后台管理数据 * 默认登陆账号filebox密码nidemima * 修改账号密码:21-22行;获取…

通过WSL在阿里云上部署Vue项目

参考&#xff1a; 阿里云上搭建网站-CSDN博客 云服务器重装 关闭当前运行实例 更换操作系统&#xff0c;还有其他的进入方式。 选择ubuntu系统&#xff08;和WSL使用相同的系统&#xff09;。 设置用户和密码。发送短信验证码。 新系统更新。秒速干净的新系统设置完成。 这…

es6 Class基本语法和继承

es6 Class基本语法 class的基本语法&#xff1a; ES6 的class只是一个语法糖&#xff0c;它的绝大部分功能&#xff0c;ES5 都可以做到&#xff0c;新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已 传统用构造函数生成实例 function Point(x, y) {th…

基于单片机锂电池电量检测数码管显示系统设计

**单片机设计介绍&#xff0c;基于单片机锂电池电量检测数码管显示系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机锂电池电量检测数码管显示系统设计的主要目标是实时、准确地检测锂电池的电量&#xff0c;并…

Java中变量a = 3中的3是存储在栈还是堆?

1、栈区&#xff08;stack&#xff09; 由编译器自动分配释放&#xff0c;存放函数的参数值&#xff0c;局部变量的值等。 2、堆区&#xff08;heap&#xff09; 是一个可动态申请的内存空间&#xff08;其记录空闲内存空间的链表由操作系统维护&#xff09;&#xff0c;在j…

状态模式实战运用

目录 前言 UML plantuml 类图 实战代码 Form State Client 前言 通常一个完整的业务流程中&#xff0c;会经历多个阶段&#xff0c;每个阶段即一个业务状态&#xff0c;不同状态下对应这不同的业务处理逻辑。 无脑堆砌 if else 做判断然后选择对应的业务处理其实也能…

STM32使用USART发送数据包指令点亮板载LED灯

电路连接&#xff1a; 连接显示屏模块&#xff0c;显示屏的SCL在B10&#xff0c;SDA在B11。 程序目的&#xff1a; 发送LED_ON指令打开板载LED灯&#xff0c;发送LED_OFF关闭板载LED灯&#xff0c;与上一个博客不同&#xff0c;这个实际上是实现串口收发文本数据包。 …

enscan自动化主域名信息收集

enscan下载 Releases wgpsec/ENScan_GO (github.com) 能查的分类 实操&#xff1a; 首先打开linux 的虚拟机、 然后把下面这个粘贴到虚拟机中 解压后打开命令行 初始化 ./enscan-0.0.16-linux-amd64 -v 命令参数如下 oppo信息收集 运行下面代码时 先去配置文件把coo…

如何购买阿里云服务器?2024年阿里云服务器购买流程分享

很多新手用户不知道阿里云服务器购买的流程&#xff0c;不清楚该如何选购云服务器配置才能既满足需求又不会掉“坑”里&#xff0c;为此笔者整理了2024年购买阿里云服务器的完整流程&#xff0c;分为通过云服务器ECS产品页下单购买和通过阿里云活动购买云服务器两种最常见的购买…

速锐得解码广汽智能数字技术车型埃安Y纯电动CAN数据DBC控制策略

随着电动化、智能化、信息化、数字化、网联化、共享化技术的不断应用与汽车行业出行趋势加深&#xff0c;为进一步巩固关键技术优势以及稳供控本、提升盈利能力&#xff0c;整车厂加速推进新能源产业链垂直整合。广汽埃安就是最为杰出的代表&#xff0c;他们不仅布局了芯片&…

大话设计模式之迪米特法则

迪米特法则&#xff0c;也称为最少知识原则&#xff08;Law of Demeter&#xff09;&#xff0c;是面向对象设计中的一个重要原则&#xff0c;其核心思想是降低耦合度、减少对象之间的依赖关系&#xff0c;从而使系统更加灵活、易于维护和扩展。 根据迪米特法则&#xff0c;一…

DataX-Oracle新增writeMode支持update

目录 前言 第一步下载源码 第二步修改源码 1、Oraclewriter 2、WriterUtil 2.1、修改getWriteTemplate方法 2.2、新增onMergeIntoDoString与getStrings方法 3、CommonRdbmsWriter 3.1、修改startWriteWithConnection 3.2、修改doBatchInsert 3.3、修改fillPreparedStatem…

Web Components使用(一)

在使用Web Components之前&#xff0c;我们先看看上一篇文章Web Components简介&#xff0c;其中提到了相关的接口、属性和方法。 正是这些接口、属性和方法才实现了Web Components的主要技术&#xff1a;Custom elements&#xff08;自定义元素&#xff09;、Shadow DOM&#…

C#手术麻醉信息系统全套商业源码,自主版权,支持二次开发 医院手麻系统源码

手术麻醉信息系统是HIS产品的中的一个组成部分&#xff0c;主要应用于医院的麻醉科&#xff0c;属于电子病历类产品。医院麻醉监护的功能覆盖整个手术与麻醉的全过程&#xff0c;包括手术申请与排班、审批、安排、术前、术中和术后的信息管理提供支持。 手术麻醉信息系统可与EM…

MySQL 数据库的日志管理、备份与恢复

一. 数据库备份 1.数据备份的重要性 备份的主要目的是灾难恢复。 在生产环境中&#xff0c;数据的安全性至关重要。 任何数据的丢失都可能产生严重的后果。 造成数据丢失的原因&#xff1a; 程序错误人为,操作错误,运算错误,磁盘故障灾难&#xff08;如火灾、地震&#xff0…

Docker部署MinIO对象存储服务

1. 拉取MinIO镜像 # 下载镜像 docker pull minio/minio#查看镜像 docker images2. 创建目录 # 文件存储目录 mkdir -p /opt/minio/data# 配置文件 mkdir -p /opt/minio/config# 日志文件 mkdir -p /opt/minio/logs3. 创建Minio容器并运行 docker run \ -p 9000:9000 \ -p 90…

CSS(一)---【CSS简介、导入方式、八种选择器、优先级】

零.前言 本系列适用于零基础小白&#xff0c;亦或是初级前端工程师提升使用。 知识点较为详细&#xff0c;如果追求非常详细&#xff0c;请移步官方网站或搬运网站。 1.CSS简介 CSS全称&#xff1a;“Cascading Style Sheets”&#xff0c;中文名&#xff1a;“层叠样式表”…