初识C++(2)

文章目录

  • 什么是缺省参数
  • 什么是函数重载
  • 什么是引用
    • 引用在函数中的作用
    • 常引用
    • 引用跟指针的区别
  • c++中的宏替换

什么是缺省参数

缺省参数:在调用函数中 可以不传参数
并且在半缺省的时候不能跳着传,只能连续传

缺省参数 不能跳跃传
半缺省(缺省值只能从右往左传,必须是连续给)
不能声明和定义不能同时出现缺省参数 
要给缺省参数 在声明给
缺省值必须是常量或者全局变量 
void Func(int a = 10, int b = 20, int c = 30)
{cout << "a= " << a << endl;	cout << "b= " << b << endl;cout << "c= " << c << endl << endl;
}int main()
{//Func(1, , 3);	Func();Func(1);Func(1,2);Func(1,2,3);return 0;
}

什么是函数重载

函数重载:函数名形同 但是类型不相同,传的个数不同
c++会自动匹配函数

函数重载的时候,不传参数调用会有歧义

函数重载:函数名可以相同 但是类型不能相同(类型不同,个数不同)
cpp中 会自动匹配参数
int Add(int x, int y)
{return x + y;
}double Add(double x, double y)
{return x * y;
}//构成重载,不传参数的时候调用存在二义性(歧义)
void f()
{cout << "f()" << endl;
}void f(int a = 0)
{cout << "f(int a)" << endl;
}int main()
{Add(1, 2);//Add(2.2, 1.1);//Add(1, 2.2);f(0);f(20);return 0;
}

什么是引用

引用:给一个量区别名(一个变量可以有多个别名),符号&
引用后 引用的改变也会改变原来变量的值

void Swap(int& left, int& right)
{int a = left;left = right;right = a;
}int main()
{// &: 引用(取别名/取外号) 一个变量可以取多个别名 地址也是一样的// 别名内容改变 会改变原本的内容int a = 1;int b = 2;int& c = a;Swap(a, b);cout << a << endl;cout << b << endl;
}

引用在函数中的作用

第一种:在函数变量里使用引用(在变量里用引用类似与指针)
传值的时候方便一些可以不用取地址符号直接传

void Swap(int& left, int& right)
{int a = left;left = right;right = a;
}

第二种引用函数中会吧返回的值 的别名赋值给main函数中接收的变量
用引用做返回值的优点:效率高
因为在函数中建立的变量出了函数会销毁那么,引用的缺点也很明显,返回的结果不确定,有可能是正常值,也有可能是随机值
但是如果在函数中使用了静态变量,他就不在栈上了,在静态区上,静态变量是需要初始化的,但是只会初始化一次,在函数中用静态变量来改变他会回到栈区

//出了作用域 返回对象就销毁了 ,不能用引用返回 ,否则结果不确定
//全局的 传引用返回 那么效率会很高 
//引用做返回值:可以修改返回对象
int& ADD(int x, int y)//有问题的代码
{//静态变量在 函数销毁后也在存在静态区的//始终的静态变量只会初始化一次static int c = x + y;//c = x + y;//如果静态变量后面被调用则从静态区变到 栈里面return c;
}//void func1()
//{
//	int a = 0;
//	cout << &a << endl;
//}
//
//void func2()
//{
//	int c = 0;
//	cout << &c << endl;
//}int main()
{//空间可以重复利用 所以 打印的地址是一样的//不同的函数名(参数类似) 也可以用同一块空间/*func1();func2();*//*func();func();*/int& ret = ADD(1, 2);//ret为函数ADD的别名;//打印 3 or 随机值cout << ret << endl;ADD(3, 4);//打印 7 or 随机值cout << ret << endl;return 0;
}

常引用

如果一个数是常量 那么不能直接引用(权限放大) 要用常引用来引用。
常引用:const 修饰 引用
但是常引用可以引用 变量(缩小权限),变量改变 常引用的值也会改变,但是常引用不能改变自己的值
还有出现整形提升时,不能用引用直接改变,因为类型转换时会产生零时变量 零时变量不能给直接引用

int main()
{//如果 是常量 那么不能直接用引用来引用常量//如果是 常引用 那么可以引用 常量//权限不能放大const int a = 10;//int& b = a;const int& b = a;// 权限可以缩小int c = 20;const int& d = c;//常引用可以给常量区别名const int& e = 10;c = 30;cout << d<<endl;int i = 1;double j = i;//类型转换的时候会产生零时变量// 同类型的时候不会产生零时变量//零时变量是不可以给改变的 所有要 用 常引用const double& rj = i;cout << rj;return 0;
}

引用跟指针的区别

语法区别: 指针需要开辟空间, 引用不需要
总结: 引用的底层是用汇编实现的

int main()
{int a = 10;//语法区别: &不开额外空间, * 开额外空间 存地址//总结:引用底层是用 汇编实现的  int& b = a;int* ptr = &a;return 0;
}

c++中的宏替换

因为c++之父觉得 宏的细节要求太麻烦了,但又要有宏的优点,所有决定用 枚举和内联来替代宏,所以出现了内联函数。

内联函数:可以把函数替换成宏,不用建立函数栈帧,并且可以调试
内敛函数中:一般小于十行的才会展开,大于不展开
在多次调用中建议不使用内敛函数

inline 可以把函数变成宏 不用创造函数栈帧  并且可以调试
内联函数:函数小于十行,才会展开,小函数用 内联会提高效率
内敛函数不能使用在多次调用的函数里 每次调用都会调用内联函数,但是函数调用的是地址inline int ADD(int x, int y)
{int c = x + y;return x + y;
}

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

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

相关文章

数据结构:Map和Set(1)

搜索树 概念 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节点的值 它的左右子树也分别为二叉搜索树 这棵树的中序遍历结果是有序的 接下来我们来模拟一棵二叉搜索树&#xff0c…

Apifox日常使用(一键本地联调)

背景说明&#xff1a;现在的项目一般都是前后分离&#xff0c;线上出bug或者在进行联调时&#xff0c;有些时候后端需要重复模拟前端数据格式&#xff0c;在使用Apifox的情况下&#xff0c;如何快速造出后端需要的数据呢&#xff1f; 随便找一个网站&#xff0c;点开f12&#…

论文阅读—— UniDetector(cvpr2023)

arxiv&#xff1a;https://arxiv.org/abs/2303.11749 github&#xff1a;https://github.com/zhenyuw16/UniDetector 一、介绍 通用目标检测旨在检测场景那种的一切目标。现有的检测器依赖于大量数据集 通用的目标检测器应该有两个能力&#xff1a;1、可以利用多种来…

计算机网络常见的名词解释

计算机网络常见的名词解释 1.应用层2.传输层3. 网络层4.链路层5. 无线网络和移动网络6.计算机网络中的安全 1.应用层 API &#xff08;Application Programming Interface&#xff09;应用程序编程接口HTTP &#xff08;Hyper Text Transfer Protocol&#xff09; 超文本传输协…

Linux难学?大神告诉你,Linux到底该怎么自学!

Linux难学&#xff1f;大神告诉你&#xff0c;Linux到底该怎么自学&#xff01; 就Linux这个学习曲线&#xff0c;如果不是有人带&#xff0c;分分钟会被自己劝退&#xff01;不过&#xff0c;要是你换个思路&#xff0c;不妨跟着这里的节奏&#xff0c;试试看&#xff1f; 知乎…

AI系统ChatGPT程序源码+AI绘画系统源码+支持GPT4.0+Midjourney绘画

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

AWS SAP-C02教程0--课程概述

SAP是亚马逊云的解决方案架构师专业级认证&#xff0c;关于本课程&#xff0c;我会简述已下3点&#xff1a; 在本课程中按照自己的分类讲述考试相关的AWS产品&#xff0c;特别会注明每个产品在考试中可能出现的考点会对一些解决方案做对比&#xff0c;通过一些对比给出不同场景…

帧间快速算法论文阅读

Low complexity inter coding scheme for Versatile Video Coding (VVC) 通过分析相邻CU的编码区域&#xff0c;预测当前CU的编码区域&#xff0c;以终止不必要的分割模式。 &#x1d436;&#x1d448;1、&#x1d436;&#x1d448;2、&#x1d436;&#x1d448;3、&#x…

linux在如何安装宝塔,宝塔在linux服务器下如何安装?

宝塔在linux服务器下如何安装&#xff1f; 那首先你得有一台linux的服务器 可以到这里白嫖一台服务器 【基本上】 https://t.aliyun.com/U/9WzPCS 有了服务器之后就可以进行宝塔的安装了&#xff01; 在Linux系统下安装宝塔面板主要分为以下步骤&#xff1a; 1、进入远程连接…

图论(欧拉路径)

理论&#xff1a; 所有边都经过一次&#xff0c;若欧拉路径&#xff0c;起点终点相同&#xff0c;欧拉回路 有向图欧拉路径&#xff1a;恰好一个outin1,一个inout1,其余inout 有向图欧拉回路&#xff1a;所有inout 无向图欧拉路径&#xff1a;两个点度数奇&#xff0c;其余偶 …

3.4、Linux小程序:进度条

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 回车与换行的概念和区别 行缓冲区概念 进度条代码 version1 version2 version3 回车与换行的概念和区别 换行\n&#xff0c;回车\r 似乎无需多言 行缓冲区概念 这里我们通过例子来简单理解即可&#xff0c;深入…

vue面试题

Vue.js 是一个渐进式的 JavaScript 框架&#xff0c;被设计用来构建用户界面。与其他重量级框架&#xff08;如 Angular 或 React&#xff09;相比&#xff0c;Vue.js 提供了更简单、更灵活的 API&#xff0c;使得你可以在各种项目中灵活使用。 Vue.js 主要的核心特性是&#…

wx 小程序不打开调试模式无法获取数据

问题开始 最近学习小程序&#xff0c;发布了一个体验版的小程序&#xff0c;发现正常扫码进入后接口数据是无法访问的。也就是原始数据,不过开启调试模式后,数据又一切正常&#xff0c;但是总不能让每个人都开启调试模式用吧&#xff0c;终于查阅资料后找到了解决问题的办法 …

10 索引优化与查询优化

文章目录 索引失效案例关联查询优化对于左外连接对于内连接JOIN语句原理简单嵌套循环连接SNLJ索引嵌套循环连接INLJ块嵌套循环连接BNLJHash Join 子查询优化排序优化filesort算法&#xff1a;双路排序和单路排序 分组优化分页优化优先考虑覆盖索引索引下推ICP使用条件 其他查询…

最新、最全、最详细的 K8S 学习笔记总结

Kubernetes就是一个编排容器的工具&#xff0c;一个可以管理应用全生命周期的工具&#xff0c;从创建应用&#xff0c;应用的部署&#xff0c;应用提供服务&#xff0c;扩容缩容应用&#xff0c;应用更新&#xff0c;都非常的方便&#xff0c;而且可以做到故障自愈。 K8S的前景…

笔记50:正则表达式入门宝典

引自&#xff1a;正则表达式是什么? - 知乎 中“龙吟九野”所写的一个回答&#xff0c;个人感觉看完之后如同醍醐灌顶&#xff0c;查了很多资料都没有这篇文章写的基础和通透&#xff0c;感觉是正则表达式扫盲好文&#xff0c;所以搬运一下&#xff0c;侵权删&#xff0c;感谢…

面向萌新的数学建模入门指南

时间飞逝&#xff0c;我的大一建模生涯也告一段落。感谢建模路上帮助过我的学长和学姐们&#xff0c;滴水之恩当涌泉相报&#xff0c;写下这篇感想&#xff0c;希望可以给学弟学妹们一丝启发&#xff0c;也就完成我的想法了。拙劣的文笔&#xff0c;也不知道写些啥&#xff0c;…

ESP8266:物联网时代的连接神器

一、引言 在当今的物联网时代&#xff0c;智能设备与互联网的连接已经成为日常生活中不可或缺的一部分。而在这股浪潮中&#xff0c;ESP8266作为一个低成本、高效率的Wi-Fi芯片模块&#xff0c;扮演着举足轻重的角色。本文将为你揭示ESP8266的魅力&#xff0c;并探讨其在物联网…

Hadoop知识点全面总结

文章目录 什么是HadoopHadoop发行版介绍Hadoop版本演变历史Hadoop3.x的细节优化Hadoop三大核心组件介绍HDFS体系结构NameNode介绍总结 SecondaryNameNode介绍DataNode介绍DataNode总结 MapReduce介绍分布式计算介绍MapReduce原理剖析MapReduce之Map阶段MapReduce之Reduce阶段 实…