【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…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...



