【C++】入门【一】
本节目标
一、C++关键字(C++98)
二、命名空间
三、C++的输入输出
四、缺省函数
五、函数重载
六、引用
七、内联函数
八、auto关键字(C++11)
九、范围for(C++11)
十、指针空值nullptr(C++11)
一.C++关键字(C++98)
- C++总计63个关键字,C语言32个关键字

二、命名空间
1.命名空间的定义
- 在C/C++中,变量、函数和后面要学到的类都是大量存在的
- 这些变量、函数和类的名称将都存 在于全局作用域中,可能会导致很多冲突
- 使用命名空间的目的是对标识符的名称进行本地化, 以避免命名冲突或名字污染
- namespace关键字的出现就是针对这种问题的

- 命名空间要用到namepsace关键字 后面跟命名空间的名字
- 每个命名空间都是一个新的作用域
- 一个命名空间就定义了一个新的作用域,里面所有内容都局限于该空间内

2.命名空间的使用
- 三种使用方法
- 1.命名空间名称加作用域限定符::

- 2.使用using将命名空间中的某个成员引入

- 3.使用using namespace 命名空间名称 引入

三、C++的输入输出


- 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含头文件<iostream>以及按命名空间使用方法使用std
- cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在<iostream>头文件中
- <<是流插入运算符 >>是流提取运算符
- 使用C++的输入输出比C语言更加方便,不需要手动控制格式,C++的输入输出可以自动识别变量类型
- 实际上cout和cin分别是ostream和istream类型的对象 << >> 也涉及到一些重载的知识,后续我们才会学到
- 早期的标准库所有功能都在全局域内,声明在.h的头文件中,后来将其实现在std命名空间内,为了和C语言区分,规定了C++头文件不用带.h,旧的编译器vc6.0还支持.h的,后续编译器已不再支持 所以推荐<iostream> + std的方式
四、缺省函数
1.缺省函数的概念
- 缺省函数是在声明或者定义函数时为函数的参数指定一个缺省值
- 在调用该函数时,如果没有指定实参,则采用缺省值

2.缺省函数的分类
- 全缺省函数

- 半缺省函数

- 注意:半缺省函数必须从右到左依次给,不能间隔
- 注意:缺省函数不能在函数声明和定义中同时出现,否则编译器不知道用哪个

- 注意:缺省值必须时常量或者全局变量
五、函数重载
1.函数重载的概念
- 函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数
- 这些同名函数的形参列表(参数个数,类型,或者顺序不同)



2.为什么支持函数重载
- C++为什么支持函数重载呢,而C语言却不支持?
- 从程序运行的角度看,C或C++的一个程序要跑起来,需要经历以下阶段
- 预处理,编译,汇编,链接

- 实际项目是由多个头文件和多个源文件构成的,当一个cpp文件中调用了一个函数
- 而此函数定义在另一个cpp文件里,此时调用函数的cpp文件里没有函数的地址
- 此时怎么办呢?这时候就用到了链接,链接看到了调用另一个cpp文件的函数
- 然后链接就会到另一个cpp文件里去找函数地址,找到链接在一起

- 那么链接时,对于这个函数,例如上面的sum函数,编译器会使用哪个名字去找它呢?
- 这里每个编译器都有自己的函数名修饰规则,windows下修饰规则过于复杂,我们这里使用linux里的修饰规则来演示



- 看完上面,大家应该理解了为什么C语言不支持重载,因为同名函数没办法区分
- 而C++是通过函数名修饰规则来区分函数的
- 只有参数不同,修饰出来的名字就不同,就支持了重载
- 注意:如果两个函数 名字跟参数 都一样, 仅仅返回值不同,是不构成重载的,编译器无法区分
六、引用
1.引用的概念
- 引用就是取外号,不是定义一个新变量,而是给已存在的变量取一个新名字
- 编译器不会为此引用开辟新空间,它和引用的变量共用一块内存空间
- 使用方法如下

- 注意:引用类型必须和引用实体是同一种类型的
2.引用的特性
- 1.引用在定义时必须初始化
- 2.一个变量可以有多个引用
- 引用一旦引用一个实体,再不能引用其他实体

3.常引用
- 如果引用的是个常量的话,需要加const

4.使用场景
- 1.做函数参数,跟指针作用类似,修改此变量可改变此变量值

- 2.做返回值

- 在一般的传值返回下,都会产生一个返回值的临时变量再返回
- 用引用的情况下,返回的就是此变量,不会建造一个临时变量,增加了效率
- 但是有几点注意事项:
- 如果函数返回时,出了作用域,返回对象还在,则可以使用引用返回,如果已经释放还给系统,则必须使用传值返回

5.传引用返回,传值返回效率比较
6.引用和指针的区别
- 在语法上,引用仅仅是个别名,没有独立空间,和其引用对象共用同一块内存空间
- 但是在底层实现上实际占有空间,因为引用底层是用指针来实现的

- 区别:
- 1.引用定义变量新别名,指针存储一个变量地址
- 2.引用定义时必须初始化,指针不需要
- 3.引用在引用一个实体后,无法再引用其他实体,指针可以切换指向
- 4.没有NULL引用,但有NULL指针
- 5.在sizeof中含义不同,引用结果为引用类型的大小,指针则只是指针变量的大小,例如4个字节
- 6.引用自加++,引用对象+1,指针自加++,指针向后偏移一个类型大小
- 7.有多级指针,但是没有多级引用
- 8.访问实体方式不同,指针需要显式解引用,引用则是编译器自己处理
- 9.引用比指针用起来相对更安全
七、内联函数
1.内联函数的概念
- 一个函数前面用inline修饰,则叫做内联函数

- 内联函数跟宏类似,内联函数在编译期间,会被展开,没有了调用函数栈帧的开销,提升了程序运行的效率
- 下面两张区别图, call的意思是跳转


2.内联函数的特性
- inline内联函数是一种以空间换时间的方法
- 缺陷是 目标文件可能变大 优点是 少了函数调用开销,提高了程序运行效率
- inline对于编译器只是一个建议,一般建议将函数里面代码量少的进行inline,如果调用频繁且递归的还是建议不用inline
- inline不建议声明和定义分离,否则会导致链接失败,因为inline函数被展开,就没有函数地址了,链接就会找不到
3.相关面试题
- 宏的优缺点?
- 优点 1.增强了代码的复用性 2.提高性能
- 缺点 1.不方便调试宏(预编译替换了)2.导致代码可读性差,可维护性差,容易误用 3.没有类型安全的检查
- C++有哪些技术可以替代宏?
- 1.常量定义const enum
- 2.短小函数定义 如inline内联函数
八、auto关键字(C++11)
- 有一些特别长的类型名,如后面要学的STL迭代器,太长写起来耗时且容易写错、
- 如果用typedef给类型起别名的话,不是特别好,有些情况下例如加了const就不行了
- 此时就产生了auto关键字 auto可以理解成一种变量类型,写在变量前面
- 可以自动的推断变量类型

- typeid是获取变量类型的库函数
- auto使用注意:定义变量时必须初始化,否则无法推导,编译器在编译器会将其auto转变为其变量实际类型
- auto使用注意:auto不能用作形参,不能用来声明数组
九、范围for(C++11)
1.范围for语法
- 在C++98要想遍历数组得这样

- 而范围for可以简化遍历操作

- 这样就可以了
2.范围for使用条件
十、指针空值(nullptr)(C++11)
- 以前喜欢给野指针赋予NULL
- 但其实NULL其实是个宏

- 在C++11里面用nullptr替代了NULL
- 为了代码的健壮性,建议使用nullptr
相关文章:
【C++】入门【一】
本节目标 一、C关键字(C98) 二、命名空间 三、C的输入输出 四、缺省函数 五、函数重载 六、引用 七、内联函数 八、auto关键字(C11) 九、范围for(C11) 十、指针空值nullptr(C11) 一.…...
【ArcGIS Pro实操第11期】经纬度数据转化成平面坐标数据
经纬度数据转化成平面坐标数据 数据准备ArcGIS操作步骤-投影转换为 Sinusoidal1 投影2 计算几何Python 示例 另:Sinusoidal (World) 和 Sinusoidal (Sphere) 的主要区别参考 数据准备 数据投影: 目标投影:与MODIS数据相同(Sinu…...
python学opencv|读取图像
【1】引言 前序学习了使用matplotlib模块进行画图,今天开始我们逐步尝试探索使用opencv来处理图片。 【2】学习资源 官网的学习链接如下: OpenCV: Getting Started with Images 不过读起来是英文版,可能略有难度,所以另推荐一…...
ffmpeg RTP PS推流
要实现 CRtpSendPs 类,使其能够将 H264 数据通过 RTP PS 流推送到指定的 URL,并支持 TCP 和 UDP 传输方式,您需要使用 FFmpeg 库。以下是该类的实现示例,包括必要的初始化、推流和退出函数。 步骤 初始化 FFmpeg 库:…...
Rust语言俄罗斯方块(漂亮的界面案例+详细的代码解说+完美运行)
tetris-demo A Tetris example written in Rust using Piston in under 500 lines of code 项目地址: https://gitcode.com/gh_mirrors/te/tetris-demo 项目介绍 "Tetris Example in Rust, v2" 是一个用Rust语言编写的俄罗斯方块游戏示例。这个项目不仅是一个简单…...
NUMA架构及在极速网络IO场景下的优化实践
NUMA技术原理 NUMA架构概述 随着多核CPU的普及,传统的对称多处理器(SMP)架构逐渐暴露出性能瓶颈。为了应对这一问题,非一致性内存访问(NUMA, Non-Uniform Memory Access)架构应运而生。NUMA架构是一种内存…...
Brain.js 用于浏览器的 GPU 加速神经网络
Brain.js 是一个强大的 JavaScript 库,它允许开发者在浏览器和 Node.js 环境中构建和训练神经网络 。这个库的目的是简化机器学习模型的集成过程,使得即使是没有深厚机器学习背景的开发者也能快速上手 。 概述 Brain.js 提供了易于使用的 APIÿ…...
Linux——用户级缓存区及模拟实现fopen、fweite、fclose
linux基础io重定向-CSDN博客 文章目录 目录 文章目录 什么是缓冲区 为什么要有缓冲区 二、编写自己的fopen、fwrite、fclose 1.引入函数 2、引入FILE 3.模拟封装 1、fopen 2、fwrite 3、fclose 4、fflush 总结 前言 用快递站讲述缓冲区 收件区(类比输…...
视觉感知与处理:解密计算机视觉的未来
文章目录 前言1. 计算机视觉的概述2. 计算机视觉的应用3. 运动感知与光流4. 人类视觉感知4.1 大脑中的视觉处理4.2 视觉缺陷与对比4.3 分辨率4.4 视觉错觉5. 图像采集与处理6. 图像处理流程7. 二值图像处理与分割8. 3D 机器视觉系统8.1 主动3D视觉8.2 立体视觉9. 商业机器视觉系…...
【大数据学习 | Spark-Core】广播变量和累加器
1. 共享变量 Spark两种共享变量:广播变量(broadcast variable)与累加器(accumulator)。 累加器用来对信息进行聚合,相当于mapreduce中的counter;而广播变量用来高效分发较大的对象,…...
postgresql按照年月日统计历史数据
1.按照日 SELECT a.time,COALESCE(b.counts,0) as counts from ( SELECT to_char ( b, YYYY-MM-DD ) AS time FROM generate_series ( to_timestamp ( 2024-06-01, YYYY-MM-DD hh24:mi:ss ), to_timestamp ( 2024-06-30, YYYY-MM-DD hh24:mi:ss ), 1 days ) AS b GROUP BY tim…...
pywin32库 -- 读取word文档中的图形
文章目录 前置操作解析body中的图形解析页眉中的图形 前置操作 基于pywin32打开、关闭word应用程序; import pythoncom from win32com.client import Dispatch, GetActiveObjectdef get_word_instance():""" 获取word进程 实例"""py…...
GitLab使用示例
以下是从 新建分支开始,配置 GitLab CI/CD 的完整详细流程,涵盖每个步骤、配置文件路径和具体示例。 1. 新建分支并克隆项目 1.1 在 GitLab 上创建新分支 登录 GitLab,进入目标项目页面。依次点击 Repository > Branches。点击右上角 Ne…...
uniapp echarts tooltip formation 不识别html
需求: echarts 的tooltip 的域名太长,导致超出屏幕 想要让他换行 思路一: 用formation自定义样式实现换行 但是: uniapp 生成微信小程序, echart种的tooltip 的formation 识别不了html ,自定义样式没办…...
3D扫描对文博行业有哪些影响?
三维扫描技术对文博行业产生了深远的影响,主要体现在以下几个方面: 一、高精度建模与数字化保护 三维扫描技术通过高精度扫描设备,能够捕捉到文物的每一个细节,包括形状、纹理、颜色等,从而生成逼真的3D模型。这些模…...
面试(十一)
目录 一.IO多路复用 二.为什么有IO多路复用机制? 三.IO多路复用的三种实现方式 3.1 select select 函数接口 select 使用示例 select 缺点 3.2 poll poll函数接口 poll使用示例 poll缺点 3.3 epoll epoll函数接口 epoll使用示例 epoll缺点 四. 进程和线程的区别…...
React-useState的使用
useState 是 React 提供的一个 Hook,允许你在函数组件中添加和管理状态(state)。在类组件中,状态管理通常是通过 this.state 和 this.setState 来实现的,而在函数组件中,useState 提供了类似的功能。 基本…...
设计模式之破环单例模式和阻止破坏
目录 1. 序列化和反序列化2. 反射 这里单例模式就不多说了 23种设计模式之单例模式 1. 序列化和反序列化 这里用饿汉式来做例子 LazySingleton import java.io.Serializable;public class LazySingleton implements Serializable {private static LazySingleton lazySinglet…...
11.19c++面向对象+单例模式
编写如下类: class File{ FILE* fp }; 1:构造函数,打开一个指定的文件 2:write函数 向文件中写入数据 3:read函数,从文件中读取数据,以string类型返回 代码实现: #include <iostream>using namespace std;class…...
一文了解TensorFlow是什么
TensorFlow是一个开源的机器学习框架,由Google开发并维护。它提供了一个灵活且高效的环境,用于构建和训练各种机器学习模型。 TensorFlow的基本概念包括: 张量(Tensor):TensorFlow中的核心数据结构&#x…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...



