C++ (Chapter 1)

C++ (一)

1.C++的命名空间

先来看一个C语言的例子:

下面这段代码是可以正常运行的.

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

但是,包含了一个头文件之后,甚至无法通过编译.

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

在这里插入图片描述

根据报错信息来看,rand本来是stdlib库中的一个库函数,但是这里我们也创建了一个叫做rand的变量,所以这里在执行printf语句时,就无法辨别rand到底是哪个了.

假若有人在项目中恰好就将某个变量名或者函数名设置成了与库中一样的名字,可就惨了,因为C语言本身是没有办法自己去解决这个问题的,只能我们主动避免.

命名空间的定义:所以为了解决上述出现的情况,C++中出现了命名空间.我们可以主动将我们声明的变量和函数等都写入这个命名空间中:

#include<stdio.h>
#include<stdlib.h>
/*定义命名空间的格式:namespace 命名空间的名字{....}
*/
namespace Space
{int rand = 0;
}
int main()
{printf("%p \n", rand);return 0;
}

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

注意:当我们想要访问的是命名空间内的变量或函数时,需要在变量/函数名之前加上 命名空间名字::,否则就是到命名空间之外去寻找该变量/函数,例如:

#include<stdio.h>
#include<stdlib.h>
/*定义命名空间的格式:namespace 命名空间的名字{....}
*/
namespace Space
{int rand = 0;
}
int main()
{printf("%d \n", Space::rand);return 0;
}

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

例如:在下面这段代码中,在命名空间之内定义了一个Add函数,假若我们就只写一个 Add(1,3);,这样是会报错的,因为没有在其之前指明 Space::,所以编译器会默认到命名空间之外去找, 而在命名空间Space之外并没有Add函数,所以就报错.

#include<stdio.h>
#include<stdlib.h>
namespace Space
{int rand = 0;void Add(int x, int y){printf("%d ", x + y);}
}
int main()
{printf("%d \n", Space::rand);Add(1, 3);return 0;
}

修正方案:

#include<stdio.h>
#include<stdlib.h>
namespace Space
{int rand = 0;void Add(int x, int y){printf("%d ", x + y);}
}
int main()
{printf("%d \n", Space::rand);Space::Add(1, 3);return 0;
}

命名空间的嵌套以及访问

假如命名空间之内还有一个命名空间,我们应当如何去访问最里层命名空间里的内容呢?

例如:访问如下命名空间里的Div函数.

#include<stdio.h>
#include<stdlib.h>
namespace Space // 外层
{int rand = 0;void Add(int x, int y){printf("%d ", x + y);}namespace Space1 //里层{void Div(int x, int y){printf("%d", x - y);}}
}

访问命名空间:方法一:加命名空间名称以及作用域限定符.

#include<stdio.h>
#include<stdlib.h>
namespace Space
{int rand = 0;void Add(int x, int y){printf("%d ", x + y);}namespace Space1 {void Div(int x, int y){printf("%d", x - y);}}
}
int main()
{printf("%d \n", Space::rand);Space::Space1::Div(1, 3);return 0;
}

访问命名空间:方法二:使用using将命名空间某个成员引入

#include<stdio.h>
#include<stdlib.h>
namespace Space
{int rand = 0;void Add(int x, int y){printf("%d ", x + y);}namespace Space1 {void Div(int x, int y){printf("%d", x - y);}}
}
using Space::Space1::Div;
int main()
{printf("%d \n", Space::rand);Div(1, 3);return 0;
}

访问命名空间:方法三:使用using namespace 命名空间名称 引入

#include<stdio.h>
#include<stdlib.h>
namespace Space
{int rand = 0;void Add(int x, int y){printf("%d ", x + y);}namespace Space1 {void Div(int x, int y){printf("%d", x - y);}}
}
//引入命名空间Space1
using namespace Space::Space1; 
//引入命名空间Space
using namespace Space;
int main()
{printf("%d \n", Space::rand);Add(1, 3);Div(1, 3);return 0;
}

2.C++的输入和输出

先来看看C++是如何输入和输出的吧!

#include<iostream>
using namespace std;
int main()
{int a = 0;cout << "hello world" << endl;cin >> a;return 0;
}

注意:std是C++标准库的命名空间名称,C++将标准库的定义实现都放到了这个命名空间中,而这里的coutendl都是在std标准库中定义的,有了 using namespace std;语句,就可以直接访问该定义了,不需要我们再手动加上命名空间名称和作用域限定符了.

这里特别说明:

  • 使用cout进行输出时,必须包含iostream头文件.
  • coutcin以及endl都是包含在iostream中的.

std命名空间的使用惯例:

  1. 在日常练习中,建议直接using namespace std即可,这样就很方便。
  2. using namespace std展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对象/函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模大,就很容易出现。所以建议在项目开发中使用,像std::cout这样使用时指定命名空间 +using std::cout展开常用的库对象/类型等方式。

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

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

相关文章

大数据Doris(八):启动FE步骤

文章目录 启动FE步骤 一、配置环境变量 二、​​​​​​​创建doris-mate

排序算法-插入排序法(InsertSort)

排序算法-插入排序法&#xff08;InsertSort&#xff09; 1、说明 插入排序法是将数组中的元素逐一与已排序好的数据进行比较&#xff0c;先将前两个元素排序好&#xff0c;再将第三个元素插入适当的位置&#xff0c;也就是说这三个元素仍然是已排序好的&#xff0c;接着将第…

剖析伦敦银最新价格走势图

国际金融市场瞬息万变&#xff0c;伦敦银的价格走势会受到诸多因素的影响&#xff0c;比如重要经济数据的公布&#xff0c;国际间的政治博弈&#xff0c;突发的政经大事&#xff0c;都可以令白银价格的走势&#xff0c;在短时间内暴涨暴跌的情况。 要在伦敦银市场实现良好的收益…

Linux文件目录总结

众所周知&#xff0c;Linux系统文件目录是树状结构&#xff0c;如下图所示&#xff1a; 英文缩写的目录下到底存放的是什么文件&#xff0c;善于做归纳总结的逍遥哥哥来解释一下&#xff1a; /bin&#xff1a;bin是Binary的缩写&#xff0c;这个目录存放着最经常使用的命令。 …

NEFU离散数学实验1-排列组合

相关概念 在离散数学中&#xff0c;组合数是一种用于计算从n个不同元素中选取m个元素的方式。以下是一些与组合数相关的概念&#xff1a; 排列&#xff1a;从n个不同元素中选取m个元素进行排列&#xff0c;排列数用P(n, m)表示&#xff0c;计算公式为P(n, m) n! / (n - m)! …

nodejs+vue家教管理系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1nodejs简介 4 2.2 express框架介绍 6 2.3 B/S结构 4 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性…

基于YOLO算法的单目相机2D测量(工件尺寸和物体尺寸)

1.简介 1.1 2D测量技术 基于单目相机的2D测量技术在许多领域中具有重要的背景和意义。 工业制造&#xff1a;在工业制造过程中&#xff0c;精确测量是确保产品质量和一致性的关键。基于单目相机的2D测量技术可以用于检测和测量零件尺寸、位置、形状等参数&#xff0c;进而实…

【网络安全】如何保护IP地址?

使用防火墙是保护IP地址的一个重要手段。防火墙可以监控和过滤网络流量&#xff0c;并阻止未经授权的访问。一家网络安全公司的研究显示&#xff0c;超过80%的企业已经部署了防火墙来保护他们的网络和IP地址。 除了防火墙&#xff0c;定期更新操作系统和应用程序也是保护IP地址…

学信息系统项目管理师第4版系列24_整合管理

1. PMBOK 1.1. 自1987年以来&#xff0c;PMBOK-直是基于过程的项目管理标准的重要代表 1.1.1. 基于过程的方法是项目管理的基石 1.2. 从2021年开始&#xff0c;第7版PMBOK采用了基于原则的标准&#xff0c;其中包含了 12个项目管理基本原则&#xff0c;这些基本原则为有效的…

Python数据攻略-递归方式实现json多层级数据展平

之前介绍过使用pandas如何展平json的多层数据,如果有兴趣可以参考文章 Python数据攻略-Pandas的json_normalize方法 Python数据攻略-递归方式实现json多层级数据展平 今天再介绍一个非常好用的使用递归的方式展平json数据。 文章目录 数据处理目标操作示例核心函数方法操作…

硬件基本功--过流、过压保护电路

1.简介 过流保护(OCP)&#xff1a;当电路电流超过预定最大值时&#xff0c;使保护装置动作的一种保护方式。不允许超过预定最大值电流&#xff0c;不然会烧坏电路的器件。过压保护(OVP)&#xff1a;被保护电路电压超过预定的最大值时&#xff0c;使电源断开或使受控设备电压降低…

AAPT2简介

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、使用介绍3.3 编译3.2 链接3.3 dump…

ChatGPT AIGC 高效办公自动化案例

根据业务员姓名查找对应月份的科目成绩。 我们让ChatGPT AIGC来完成Excel公式。 Prompt:有一个表格A列为姓名,B列为语文,C列为数学,请根据J2单元格的姓名 ,查找出对应的数学成绩,请写出函数来完成 将生成的vlookup函数公式=VLOOKUP(J2, A:C, 3, FALSE)复制到表格中进行验…

Windows11下清理Docker Desktop与wsl的C盘空间占用

一、清理Docker Desktop的磁盘占用 //【查看docker 占用的空间】 docker system dfTYPE 列出了docker 使用磁盘的 4 种类型&#xff1a; Images&#xff1a;所有镜像占用的空间&#xff0c;包括拉取下来的镜像&#xff0c;和本地构建的。Containers&#xff1a;运行的容器占用…

整理mongodb文档:副本集成员可以为偶数

个人博客 整理mongodb文档:副本集成员可以为偶数 想了下&#xff0c;仲裁节点还是不想直接说太多&#xff0c;怕有的同学想太多&#xff0c;且本身副本集就偏向运维的&#xff0c;新手基本也没什么权限操作&#xff0c;就不多废话了。 文章概叙 文章从MongoDB是否可以用偶数…

【计算机网络笔记】计算机网络的结构

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 文章目录 系列文章目录网络边缘接入网络数字用户线路 (DSL)电缆网络典型家庭网络的接入机构&#xff08;企业&#xff09;接入网络 (Ethernet)无线接入网络 网络核心Internet结构最后 计算机网络的结构…

scratch保护环境 2023年5月中国电子学会图形化编程 少儿编程 scratch编程等级考试一级真题和答案解析

目录 scratch保护环境 一、题目要求 1、准备工作 2、功能实现 二、案例分析

panads操作excel

panads简介 pandas是基于Numpy创建的Python包&#xff0c;内置了大量标准函数&#xff0c;能够高效地解决数据分析数据处理和分析任务&#xff0c;pandas支持多种文件的操作&#xff0c;比如Excel&#xff0c;csv&#xff0c;json&#xff0c;txt 文件等&#xff0c;读取文件之…

android studio 我遇到的Task :app:compileDebugJavaWithJavac FAILED问题及解决过程

前几天一个网友在学习我的一个小项目的时候&#xff0c;发现无法达到目的&#xff0c;在帮他解决问题的过程中发现他用的是最近的giraffe版本的as&#xff0c;我用的是老版本&#xff0c;没办法打开他的项目&#xff0c;没办法只能卸载我的as&#xff0c;安装了最近版的diraffe…

华为云云耀云服务器L实例评测 | 实例使用教学之综合导览

华为云云耀云服务器L实例评测 &#xff5c; 实例使用教学之综合导览 实例使用教学实例场景体验实例性能评测实例评测使用介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什么华为云云耀云…