暑期c++ 命名空间

news2024/11/13 10:25:05

有任何不懂的问题可以评论区留言,能力范围内都会一一回答

今天是暑期第一天开始写c++笔记,新起点,新开始加油

我们先来看两串代码

这串代码编译没有问题

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

但是如果我加一个头文件#include<stdlib.h>就无法编译了

这个地方编译错误说明的很清楚了,从宏那个章节我们知道 头文件里面定义函数,而该函数名和我们定义的全局变量rand冲突了,但是如果我们定义局部变量rand编译就会通过。

但是一旦涉及大项目,我们两个命名的变量一样就会出错,C改起来很麻烦很麻烦,于是C++就出现了域这个概念

首先我们要引入域这个概念,域可以类比空间来理解,局部域可以类比理解成局部空间。

我们可以用namespace去定义一个域

我们使用同一个变量或者函数时,会从局部局部域去寻找,再到全局域寻找,但是如果在局部域里面我想用全局域怎么办呢?或者说如果我想到其他域搜索值怎么办呢?

比如这串代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int a = 1;//全局域的a
namespace ly//定义ly这个域
{
	int a = 2;//ly这个域的a
}
int main(void) {
	int a = 3;//局部域的a
	return 0;

这个地方三个三个a的值,我们如果想用局部域的a怎么用,首先我们要理解如果我们直接

printf("%d",a);它会现在局部域(当下的语句所处的域)中找a的值,然后再去全局域找值,那么如果全局域也没有值,它会不会去其他域找值呢?显然是不会的,那么像上面那个代码的例子,我们该如何使用全局域或者其他域的值呢?C++给我们提供了一个新方法那就是::符号,比如ly::a就代表ly域中的a,::a就代表全局域的a,这样C++就避免了原先c的不足之处了

像这样我们想用哪个域的值就可以直接通过::符号直接用了,也就是指定访问

当然对于命名空间域还有另一种方式,就是展开命名空间域 ,也就是using namespace,比如我要展开ly这个域,那就直接using namespace ly就可以了,命名空间域展开后该域里面的变量都会变成全局变量。

很明显命名域被展开后,命名域里面的变量会变成全局变量 。

这也就是为什么我们用C++时常写一句

using namespace std;

std是C++的标准库

当然头文件通过using namespace 展开是将头文件的类容拷贝到代码里面来

当然我们展开也就意味着会有会出现变量重名的问题,也就是文章最初的问题,我展开后如果该域中的a变量变成了全局变量,全局域中也有一个变量a,且a的值还不一样,这样会导致报错。

因此我们平时练习可以展开,但是项目时不建议展开。

那么有没有好用的办法呢?显然有,那就是把常用的那部分展开就可以了也就是局部展开

比如using std ::cout

比如using std ::endl

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

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

相关文章

手机图片如何转化为word文档?分享3种好用的软件。

在数字化时代&#xff0c;手机已经成为我们生活中不可或缺的一部分。随着手机拍照功能的日益强大&#xff0c;我们常常用手机记录下重要的信息和瞬间。但你有没有遇到过这样的烦恼&#xff1a;如何将手机里的图片快速转化为可编辑的Word文档呢&#xff1f;今天&#xff0c;就为…

从工艺到性能:模具3D打印材料不断革新

在模具3D打印领域&#xff0c;材料性能的持续优化与创新是推动模具3D打印的关键因素&#xff0c;近年来&#xff0c;各种3D打印新材料不断涌现&#xff0c;模具3D打印材料也开始重工艺导向逐步向性能导向发展&#xff0c;如毅速公司推出的ESU-EM191/191S及ESU-EM201不锈钢粉末、…

C语言 | Leetcode C语言题解之第299题猜数字游戏

题目&#xff1a; 题解&#xff1a; #define MIN(a, b) ((a) < (b) ? (a) : (b))char * getHint(char * secret, char * guess){int A 0;int B 0;int dicS[10] {0};int dicG[10] {0};int i 0;while(secret[i]){if(secret[i] guess[i]){//同位置且相等&#xff08;完…

【React】useState:状态管理的基石

文章目录 一、什么是 useState&#xff1f;二、useState 的基本用法三、useState 的工作原理四、高级用法五、最佳实践 在现代前端开发中&#xff0c;React 是一个非常流行的库&#xff0c;而 useState 是 React 中最重要的 Hook 之一。useState 使得函数组件能够拥有自己的状态…

RHEL 7.6 安装oracle database 19c Real Application Cluster Part5: RU配置

RHEL 7.6 安装oracle database 19c Real Application Cluster Part1: 基础环境配置 RHEL 7.6 安装oracle database 19c Real Application Cluster Part2: Grid Infrastructure配置 RHEL 7.6 安装oracle database 19c Real Application Cluster Part3: ASM磁盘组配置 RHEL 7.…

《程序猿入职必会(5) · CURD 页面细节规范 》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

深入理解多态:发工资

看完目录就可以大概理解了&#xff0c;然后就需要去敲一敲代码&#xff0c;不过这个多态还确实挺厉害的。 目录 做一件事 员工1&#xff1a;干第一个过程 员工2&#xff1a;干第二个过程 员工3&#xff1a;干第三个过程 员工4&#xff1a;干第四个过程 员工5&#xff1a;…

Live555源码阅读笔记:哈希表的实现(C++)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

重生之“我打数据结构,真的假的?”--6.排序

1.排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使⼀串记录&#xff0c;按照其中的某个或某些关键字的⼤⼩&#xff0c;递增或递减的排列起来的 操作。 1.1排序分类 2.排序算法实现 2.1插入排序 直接插⼊排序是⼀种简单的插⼊排序法&#xff0c;其基本思想是&#…

深入探索Python3网络爬虫:构建数据抓取与解析的强大工具

前言 在当今这个信息爆炸的时代&#xff0c;数据成为了驱动各行各业发展的关键要素。无论是市场分析、用户行为研究&#xff0c;还是内容聚合与推荐系统&#xff0c;都需要从海量的互联网数据中提取有价值的信息。而网络爬虫&#xff0c;作为自动化获取网页数据的技术手段&…

FPGA开发——按键的使用及其消抖方法

一、概述 我们在进行各种硬件开发时通常都会实现多效果的综合和实现&#xff0c;而在实际的开发中&#xff0c;每个时刻只会显示单个效果&#xff0c;这就需要涉及到效果之间的切换了&#xff0c;而要实现状态切换最好的就是使用按键进行按键&#xff0c;所以按键在我们的日常…

Redis知识点总价

1 redis的数据结构 2 redis的线程模型 1&#xff09; Redis 采用单线程为什么还这么快 之所以 Redis 采用单线程&#xff08;网络 I/O 和执行命令&#xff09;那么快&#xff0c;有如下几个原因&#xff1a; Redis 的大部分操作都在内存中完成&#xff0c;并且采用了高效的…

深度学习系列69:模型部署的基础知识

参考https://mp.weixin.qq.com/s?__bizMzI4MDcxNTY2MQ&mid2247488952&idx1&sn880d3ad47a8fb3eab56514135f0e643b&chksmebb51d5adcc2944c276af19e8cff5e73c934f8811706be0a94c5f47f9e767c902939903e6b95&scene21#wechat_redirect 1. 基本流水线 1.1 介绍…

掀桌子了!原来是咱们的大屏设计太酷,吓着前端开发老铁了

掀桌子了&#xff01;原来是咱们的大屏设计太酷&#xff0c;吓着前端开发老铁了 艾斯视觉观点认为&#xff1a;在软件开发的世界里&#xff0c;有时候创意和设计的火花会擦得特别亮&#xff0c;以至于让技术实现的伙伴们感到既兴奋又紧张。这不&#xff0c;我们的设计团队刚刚…

故障诊断 | 基于Transformer故障诊断分类预测(Matlab)

文章目录 预测效果文章概述程序设计参考资料预测效果 文章概述 Transformer故障诊断/分类预测 | 基于Transformer故障诊断分类预测(Matlab) Transformer 模型本质上都是预训练语言模型,大都采用自监督学习 (Self-supervised learning) 的方式在大量生语料上进行训练,也就是…

【Django】开源前端库bootstrap,常用

文章目录 下载bootstrap源文件到本地项目引入bootstrap文件 官网&#xff1a;https://www.bootcss.com/V4版本入口&#xff1a;https://v4.bootcss.com/V5版本入口&#xff1a;https://v5.bootcss.com/ 这里使用成熟的V4版本&#xff0c;中文文档地址&#xff1a;https://v4.b…

优化mac outlook通过nginx反向代理后使用ews访问Exchange 2016邮件访问速度慢的有效方法

在nginx配置exchange的反向代理后,mac系统上通过exchange邮箱,通过nginx代理连接邮箱,发现速度很慢,通过查看日志,也存在大量的401失败日志。通过不断的优化和尝试,目前来看,基本上正常了,基本上没有出现大量访问失败的问题。以下就是优化过程中尝试过的方法。 1. 身份…

java学习--包装类

包装类 Boolean的关系图 Character关系图 其他关系图 包装类和基本数据转换 Debug进入之后可以看到底层代码如下 例题&#xff1a; 三元运算符是一个整体返回的数的类型看其中所含类型最高的那个是谁就会转成哪个 想要掌握这个这个知识&#xff0c;就要多看源码&#xff0c;直接…

深入理解计算机系统 CSAPP 家庭作业11.10

A: //home.html <form action"/cgi-bin/adder" method"GET"><ul><li><label for"n1">n1:</label><input type"text" id"n1" name"n1" /> //name的值决定页面提交后&#xf…