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

news/2024/4/28 12:29:16/文章来源:https://blog.csdn.net/qq_47386786/article/details/137122672

初识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.luyixian.cn/news_show_1026776.aspx

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

相关文章

部署elementPlus离线版本

最近项目需要离线开发&#xff0c;不能联网查一些组件的api&#xff0c;于是决定搞一个离线版的文档 一、下载官方文档 下载地址 github地址 gitee地址 选择版本 直接下载压缩包 二、下载live-server插件 全局下载live-server插件 npm i live-server -gvscode下载 三…

Linux split分割xls或csv文件

文件名&#xff1a;test.xls split -a 2 -d -l 100 test.xls test-a 2&#xff1a;后缀是2位 -d&#xff1a;后缀数字 -l 100 &#xff1a;每100行一个文件 test.xls&#xff1a;需要分割的文件名 test&#xff1a;分割后的文件前缀批量修改文件后缀 for i in test*; do mv $…

三位数组合-第12届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第42讲。 三位数组合&#…

Haproxy负载均衡介绍即部署

haproxy的原理&#xff1a; 提供高可用、负载均衡以及基于TCP&#xff08;四层&#xff09;和HTTP&#xff08;七层&#xff09;应用的代理&#xff0c;支持虚拟主机&#xff0c;开源可靠的一款软件。 适用于哪些负载特别大的web站点&#xff0c;这些站点通常又需要回话保持和七…

Java项目——黑马点评(优惠券秒杀7之Redis消息队列MQ实现异步秒杀)

优惠券秒杀7——Redis消息队列实现异步秒杀 一、问题引出—— 内存溢出—— 之前我们使用的是JDK里面的阻塞队列&#xff0c;而这个队列使用的是JDK里面的内存。如果不加以阻止&#xff0c;在高并发情况下可能会有无数订单对象需要创建并且放到阻塞队列里面。可能会导致将来…

arm 外部中断

main.c: #include"key_inc.h" //封装延时函数 void delay(int ms) {int i,j;for(i0;i<ms;i){for(j0;j<2000;j){}} } int main() {//按键中断的初始化key1_it_config();key2_it_config();key3_it_config();while(1){printf("in main pro\n");delay(1…

C++自主点餐系统

一、 题目 设计一个自助点餐系统&#xff0c;方便顾客自己点餐&#xff0c;并提供对餐厅销售情况的统计和管理功能。 二、 业务流程图 三、 系统功能结构图 四、 类的设计 五、 程序代码与说明 头文件1. SystemMap.h #pragma once #ifndef SYSTEMMAP #define SYSTEMMAP #in…

【八股】泛型

泛型存在的意义&#xff1f; 为了使相同的代码适用于多种数据类型&#xff0c;也就是代码复用。 参数类型上下限限制 <?> 无限制 <? extends E> 声明了类型的上界&#xff0c;表示参数类型可以是他或他的子类。 <? super E> 声明了类型的下界&#xf…

深度学习中的随机种子random_seed

解释 由于模型中的参数初始化例如权重参数如下图&#xff0c;就是随机初始化的&#xff0c;为了能够更好的得到论文中提到效果&#xff0c;可以设置随机种子&#xff0c;从而减少算法结果的随机性&#xff0c;使其接近于原始结果。 设置了随机种子&#xff0c;产生的随机数都…

python、execl数据分析(数据描述)

一 python 1.各函数 1.1python库的安装与导入 #pip install os#pip install matplotlib#pip install seaborn#pip install scikit-learn#pip install scipy#修 改 工 作 目 录import osos.getcwd () # 查看当前工作环境os.chdir( F :\my course\database ) # 修改工作环境o…

linux之Haproxy

介绍 haproxy是一种开源的TCP和HTTP负载均衡代理服务器软件。客户端通过Haproxy代理服务器获得站点页面&#xff0c;而代理服务器收到客户请求后根据负载均衡的规则将请求数据转发给后端真实服务器 下载Haproxy yum install haproxy -y 开启服务 systemctl start haproxy 配…

如何在CentOS使用Docker搭建MinIO容器并实现无公网ip远程访问本地服务

文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器&#xff0c;可以在各种环境中运行&#xff0c;例如本地、Docker容器、Kubernetes集群等。它兼…

困难重重!如何将超导量子计算机完好无损地搬进数据中心

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 编辑丨慕一 编译/排版丨浪味仙 沛贤 深度好文&#xff1a;3700字丨18分钟阅读 如何把超导量子计算机部署到数据中心&#xff1f;数据中心运营商和量子公司面临着以前没有见过的重重难关。 首…

SqlServer找不到SQL Server Configuration Manager(配置管理)

1、Win键 R &#xff0c;输入 compmgmt.msc 2、找到Sql Server配置管理器

自媒体用ChatGPT批量洗稿软件V5.9环境配置/软件设置教程【汇总】

大家好&#xff0c;我是淘小白~ 首先&#xff0c;感谢大家的支持~~ ChatGPT采集洗稿软件V5.9版本更新&#xff0c;此次版本更新修改增加了一些内容&#xff1a; 1、自定义多条指令&#xff0c;软件自动判断指令条数&#xff0c;进行输入 2、增加谷歌浏览多账号轮询&#xf…

阿里云4核8G云服务器优惠价格表,多配置报价

阿里云4核8G云服务器优惠价格955元一年&#xff0c;云服务器ECS通用算力型u1实例。2024年腾讯云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff…

面向对象的学习

封装 //用来描述一类事物的类&#xff0c;专业叫做&#xff1a;javabean类 //在javabean类是不写main方法的//一个java文件中可以定义多个类&#xff0c;且只能一个类是public修饰&#xff0c;而且public修饰的类名必须成为代码的文件名 ://在类中一般无需指定初始化值 存在默…

智慧光伏:企业无纸化办公

随着科技的快速发展&#xff0c;光伏技术不仅成为推动绿色能源革命的重要力量&#xff0c;更在企业办公环境中扮演起引领无纸化办公的重要角色。智慧光伏不仅为企业提供了清洁、可持续的能源&#xff0c;更通过智能化的管理方式&#xff0c;推动企业向无纸化办公转型&#xff0…

鸿蒙APP开发:【ArkTS类库多线程】TaskPool和Worker的对比(2)

askPool运作机制 图1 TaskPool运作机制示意图 TaskPool支持开发者在主线程封装任务抛给任务队列&#xff0c;系统选择合适的工作线程&#xff0c;进行任务的分发及执行&#xff0c;再将结果返回给主线程。接口直观易用&#xff0c;支持任务的执行、取消。工作线程数量上限为4。…

基于Python实现多功能翻译助手(下)

为了将上述步骤中的功能增强与扩展具体化为代码&#xff0c;我们将实现翻译历史记录功能、翻译选项配置以及UI的改进。 翻译历史记录功能 import json # 假设有一个用于存储历史记录的json文件 HISTORY_FILE translation_history.json # 初始化历史记录列表 translati…