c++之旅——第一弹

本篇文章内容为C语言到C++语言的过渡阶段第一篇,用来更好地过渡到c++阶段,所以没有讲和C语言相同的知识点,着重于两者之间的区别之处来进行讲述c++,创作不易,希望大家多多支持哦,如有知识性错误欢迎评论指正!

一.bool类型:
用来判断真假,判断条件、流程控制、逻辑运算

1.知识点介绍:
(1)、bool是一种数据类型
(2)、取值为true(真)或false(假)
(3)、定义: bool isDown=false;
(4)、内存大小占1字节
(5)、还可以赋值为一个数值,遵循非零即真,零即假的原则

二.内联函数:
1.知识点介绍:
(1)、内联函数是通过内存膨胀减少函数的跳转时间,以空间换时间。普通的函数调用都需要跳转到函数体,进行入栈出栈的过程,使用了内联函数相当于将函数体内容复制到调用处来减少跳转所花费的时间。
(2)、内存膨胀:代码区的行数或者代码量变多

2.内联函数的定义:定义一个内联函数也就是在定义函数的时候在返回值类型前面加上一个inline修饰函数

3.内联函数的特点:
(1)、还是一个函数,调用方式与普通函数是一样的
(2)、调用内联函数不会有入栈和出栈,不用跳转到函数中然后回到主函数
(3)、如果函数中执行的步骤很多,且是内联函数,还相当于一个普通函数,因为减少的跳转时间相对于函数体来说可以忽略不计了

4.(不)建议使用内联函数的情况:
(1)、函数体代码过长,或者函数体中有循环、递归,不建议使用内联  
(2)、函数体是简单的赋值语句或者返回语句,而且使用频率高,建议使用

5.内联函数和宏替换的不同之处:
内联函数在这里类似于带参宏替换,但是他们是有区别的,内联函数是一个函数,是在程序执行期间运行的,没有函数的入栈和出栈,带参宏替换是在预处理阶段执行的,本质是替换,内联函数有形参类型,有返回值类型和返回值,带参宏的形参是没有类型,没有返回值类型也没有返回值

三.引用:
1.知识点介绍:
引用是对一个变量或者对象取的别名, typedef  只能给类型取别名,这两者要区分开

2.引用的定义示例:

int a = 0;
int &b = a;
b=1;


在上述示例中,b 是对 a 的引用,它是 a 的别名。通过 b 可以操作 a,对 b 的修改也会影响到 a,所以此时a变量的值改变为了1.

3.引用的使用:(注意一点是引用不会占空间)
(1)、对结构体也可以使用引用:
示例:

struct node{   int x;    int y;
}
node n;
node &ref = n;
ref.x = 1;  //等价于n.x=1;


(2)、引用作为函数形参:
示例:

void fun1(int &x,int &y)    //形参为引用可以修改实参的值,作用效果相当于指针
{    x = 1;      y = 1;  
}
//注意:返回值为引用的时候,不要返回局部变量,如下,函数调用完之后a是会被释放的
int& fun2()
{    int a = 10;    return a;
}
int main()
{    
int value1 = 0, value2 = 0;    
fun(value1, value2);    
printf("%d,%d\n", value1, value2);  //输出为1,1        
int & ref =  fun2();    
printf("%d\n",ref); //输出10,第一次能输出是编译器的优化    
printf("%d\n",ref); //输出未知的值       
return 0;
}

4.引用的注意事项:
(1),由于引用是别名,所以定义引用的时候要对其进行初始化操作
(2),&(取地址,逻辑与的运算)在等号的左边是引用,右边是取地址,在两个式子中间是逻辑与
(3),引用不是定义新的变量或者对象,所以它不会开辟新的内存空间
(4),引用的类型必须要与所对应的变量类型相同

5.指针与引用的区别:
在效率上是没有多大区别的。  
1、引用是别名,不会被分配空间。指针是实体,会被分配空间  
2、引用在定义时必须初始化,而且不能被改变,指针定义时可以不用初始化,也可以改变值  
3、指针有多级指针,但是没有多级引用  
4、引用是直接访问,指针是间接访问

四,函数重载:
在同一作用域(同一项目)内,传递到函数中参数个数或类型不同就能实现重命名,即函数名字相同并且参数列表不同(1.参数个数不同   2.相对应位置上的参数类型不同)就是函数的重载。调用时使用对应参数类型的函数即可。

1.函数重载容易导致的二义性及其解决(简化代码实例):

int fun(int a){}
int fun(float a){}


从函数重载的重载条件来看,构成重载,编译不会有问题,但在调用时,如果调用方式如:fun(2.3); 这样由于函数的实参为double,而该函数并无该类型的重载,在编译时会自动将double类型强转去匹配函数,这时double可以强转为int,也可以强转为float,这样就会出现二义性的问题。

2.解决方式:
(1)、加入新的重载函数 int fun(double a){}
(2)、调用时对实参强转类型 如:fun((int)2.3);或者传一个不会进行转换的参数进去

五,函数的参数缺省:
1.概念:
在函数定义或者声明时给函数的参数提供一个默认值,然后在函数调用时,就可以不给这个形参传递实参而使用默认值了,如果给这个形参传递值了,那么就使用这个传递的值。

2.函数的缺省参数定义:

void fun(int a,int b=2){}
//函数调用: fun(1); fun(1,3);


 
3.函数的缺省参数注意事项:
(1)、缺省参数只能由后往前依次缺省,否则无法使用缺省函数的特性,比如有两个参数,缺省了第一个,但调用时要使用缺省函数的特性,就只能传一个参数,此时那么第二个参数就没有传值,会出现错误,而要解决这个问题,就需要将两个参数都赋值实参,但这样就又失去了参数缺省的意义,故只能从后往前缺省。
(2)、缺省值必须是常量,不能使用变量
(3)、函数如果只有定义,需在定义的参数列表中指明缺省参数。如果函数有声明和定义,则缺省参数只需在声明中指明即可。

4.函数的缺省参数与函数重载共同使用时产生的二义性及解决方法:
(1)二义性问题:

int add(int a,int b,int c = 0);
int add(int a,int b);
add(1,2);   //出现了二义性,此时不知道是调用了哪一个函数

(2)解决方式:
不使用该缺省函数或者不使用函数重载。

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

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

相关文章

P沟道与N沟道MOSFET的基本概念

N沟道与P沟道MOSFET基本原理与区别 学习MOSFET时的简单笔记作为个人总结,仅供学习参考,实际电路设计请直接略过!!! 文章目录 N沟道与P沟道MOSFET基本原理与区别前言一、MOSFET ?二、N沟道MOS管原理三、P沟…

网络编程day2

1.思维导图 2.TCP通信模型 tcpSer.c #include<myhead.h> #define SER_IP "192.168.159.143" #define SER_PORT 5678 int main(int argc, const char *argv[]) {//&#xff11;&#xff0e;创建用于监听的套接字int sfd-1;sfdsocket(AF_INET,SOCK_STREAM,0);/…

华为自动驾驶技术详解报告分享

ADS2.0首发搭载问界M5智驾版&#xff0c;城市NCA计划年底全国开通。2023年4月16日华为在智能汽车解决方案发布会上发布了最新的ADS2.0产品&#xff0c;硬件数量减少至27个(11个摄像头12个超声波雷达3个毫米波雷达1个激光雷达,ADS1.0有34个)&#xff0c;车载计算平台改为MDC610&…

二叉树——二叉树所有路径

二叉树所有路径 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,null,5] 输出&#xff1a;["1->2->5","1-…

深入理解Java中的优先级队列(堆)——PriorityQueue

引言&#xff1a; 在Java中&#xff0c;优先级队列&#xff08;PriorityQueue&#xff09;是一种基于堆结构实现的队列&#xff0c;其中每个元素都有一个优先级&#xff0c;优先级高的元素在队列中具有更高的优先级&#xff0c;排在前面。优先级队列常用于任务调度、事件处理等…

9.函数,变量作用域(全局作用域和局部作用域),匿名函数,立即执行函数,逻辑中断,常见值布尔判断

函数 其实学习函数学习的不仅仅是在js中如何声明一个函数如何给函数传参如何引用和调用函数&#xff0c;函数在整个编程领域都是一种思想—抽取和封装的思想 那么啥是抽取和封装的思想呢&#xff1f;-------------------------------------------- 抽取 抽取就是比如拿厨房…

【MATLAB源码-第149期】基于MATLAB的2ASK,2FSK,2PSK,2DPSK等相干解调仿真,输出各节点波形。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 2ASK&#xff08;二进制幅移键控&#xff09;、2FSK&#xff08;二进制频移键控&#xff09;、2PSK&#xff08;二进制相移键控&#xff09;和2DPSK&#xff08;二进制差分相移键控&#xff09;是数字调制技术中的基本调制方…

1 数据分析概述与职业操守

1、 EDIT数字化模型 E——exploration探索 &#xff08;是什么&#xff09; 业务运行探索&#xff1a;探索关注企业各项业务的运行状态、各项指标是否合规以及各项业务的具体数据情况等。 指标体系——目标&#xff08;O&#xff09;、策略&#xff08;S&#xff09;、指标&a…

网工内推 | 项目经理,软考证书优先,最高26K,加班补贴

01 龙盈智达 招聘岗位&#xff1a;项目经理 职责描述&#xff1a; 1 根据业务员需求&#xff0c;完成生态圈下账簿中心系统的开发管理工作。 2 负责账簿中心实施过程中的需求调研分析、方案设计、开发测试、系统上线等工作的计划、组织协调、沟通等方面管理工作。 3 完成系统核…

将python程序打包为exe格式

1. 安装pyinstaller winr打开命令窗口 输入&#xff1a; pip install pyinstaller输入命令后会自动安装pyinstaller 2. 打包 进入你的代码所在位置&#xff0c;输入cmd 在弹出的窗口中输入 pyinstaller --onefile your_script.pyyour_script.py修改为你需要打包的程序名字 …

select * from 表 c=‘1‘ and b=‘2‘ and a=‘3‘; abc是联合索引,这样查询会命中索引吗?

倒叙也会命中索引 但是要注意&#xff0c;倒叙的时候必须要有a存在&#xff0c;否则就会索引失效 因为mysql底层会有优化器去进行优化&#xff0c;但是如果没有a的话&#xff0c;那么优化器就不知道要优化那个索引了&#xff0c;所以他走了全表&#xff0c;导致索引失效

Unity(第九部)物体类

拿到物体的某些数据 using System.Collections; using System.Collections.Generic; using UnityEngine;public class game : MonoBehaviour {// Start is called before the first frame updatevoid Start(){//拿到当前脚本所挂载的游戏物体//GameObject go this.gameObject;…