当前位置: 首页 > news >正文

C++:auto关键字、内联函数、引用、带默认形参值的函数、函数重载

 一、auto关键字

在C++中,auto关键字是一个类型说明符,用于自动类型推导。 

 使用 auto 关键字时,变量的类型 是在编译时由编译器 根据 初始化表达式 自动推导出来的。这意味着你 不能在 声明 auto 变量时 不进行初始化 == 声明 auto 变量时,必须初始化,因为编译器需要这个初始化表达式来确定变量的类型。

int a = 10;
auto b = a;//b也是int型

对于过长或难以拼写的类型,可以用auto代替。 

二、内联函数

内联函数的定义与普通函数的定义方式几乎一样,只是需要使用关键字inline,语法形式如下:

inline 类型说明符 函数名(含类型说明的形参表)
{
        语句序列
}

inline关键字主要是一个向编译器发出的优化建议,而不是一个强制性的命令。 

#include <iostream>  // 声明内联函数  
inline int max(int a, int b) {  return (a > b) ? a : b;  
}  int main() {  int x = 5, y = 10, z;  z = max(x, y); // 这里调用max函数,编译器可能会将其内联展开  std::cout << "The maximum is " << z << std::endl;  return 0;  
}

        在函数定义前加上inline关键字,我们请求编译器在可能的情况下将max函数的调用内联展开。这意味着,在main函数中调用max(x,y)时,编译器可能会直接将max函数的代码(即(a > b) ? a : b)插入到调用点,它会在调用点将函数的代码直接展开,而不是执行实际的函数调用。这意味着没有栈帧的创建和销毁也没有参数和返回值的显式传递
        内联展开可以减少函数调用的开销,并提高程序的执行效率,特别是对于小型且频繁调用的函数。

注:内联函数只放头文件,不放源文件 !!!

 三、引用&

 定义:

引用是某个变量的别名

特性:

  1. 引用必须在声明时就被初始化
  2. 一旦引用被初始化为某个变量,它就不能再指向另一个变量

例子: 

指针引用的 

  • 初始化:引用在声明时必须初始化,且之后不能改变;指针在声明时可以不立即初始化,成为野指针,但使用前必须确保它们已经指向了有效的内存地址
  • 灵活性指针比引用更灵活,因为它们可以在任何时候指向另一个地址;但这也使得指针更容易出错。
  • 安全性:引用在语法层面上提供了一定程度的安全性,因为编译器会检查引用的有效性;而指针需要程序员自己管理,更容易出现错误。
  • 用途引用通常用于函数参数传递返回值,以减少拷贝指针则更常用于动态内存管理、数据结构(如链表、树)的实现等场景。

 指针引用

  • 间接访问:引用和指针都允许通过间接的方式访问和操作变量的值,而不是直接访问变量本身。这是它们最核心的相似之处
  • 作为函数参数传递:在函数调用时,引用和指针都可以作为参数传递
  • 作为函数返回值:函数可以返回引用或指针,这样调用者就可以访问和操作函数内部创建或修改的变量的值。
  • 实现多态性:在面向对象编程中,引用和指针都可以用来实现多态性。通过基类引用或指针指向派生类对象,可以在运行时根据对象的实际类型来调用相应的虚函数。

四、带默认形参值的函数 

 注意:

 默认形参值必须往后面(右边)给,并且此后,默认形参值的右边的所有参数必须都带默认形参值。

五、函数重载 

两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数的最佳匹配自动确定调用哪一个函数,这就是函数的重载。 

 

注意:

  • 重载函数的形参必须不同个数不同或者类型不同。
  • 编译程序对实参和形参的类型及个数进行最佳匹配,来选择调用哪一个函数。
  • 如果函数名相同,形参类型也相同(无论函数返回值类型是否相同),在编译时会被认为是语法错误(函数重复定义)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Motionface ai工具有哪些?
  • 三相整流电路交流侧谐波仿真分析及计算
  • C语言入门基础题:最大公约数(三个数间取最大公约数)
  • C语言学习
  • vite.config.ts中proxy的rewrite理解
  • 【网络】网络的发展历程及其相关概念
  • 使用Response.Write实现在页面的生命周期中前后台的交互
  • Ubuntu小键盘消失,并且安装好搜狗输入法后无法打出中文的问题
  • 带头双向循环链表(一)
  • 前端(四):前后端分离开发(YAPI的使用)
  • 计算机网络中点到点与端到端协议的区别
  • web小游戏开发:拼图(四)对调和移动拼图玩法的实现
  • 自定义 SwiftUI 中符号图像的外观
  • 同一个项目两个页签之间通信之 BroadcastChannel
  • ANN(Approximate Nearest Neighbor)搜索和索引库到底是什么?
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • ➹使用webpack配置多页面应用(MPA)
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Android 控件背景颜色处理
  • bearychat的java client
  • ECMAScript入门(七)--Module语法
  • HashMap剖析之内部结构
  • JavaScript学习总结——原型
  • JAVA之继承和多态
  • react 代码优化(一) ——事件处理
  • Spring核心 Bean的高级装配
  • vue脚手架vue-cli
  • webpack入门学习手记(二)
  • 记一次用 NodeJs 实现模拟登录的思路
  • 浏览器缓存机制分析
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 思考 CSS 架构
  • 通信类
  • 微信小程序--------语音识别(前端自己也能玩)
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # Redis 入门到精通(七)-- redis 删除策略
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (30)数组元素和与数字和的绝对差
  • (C语言)字符分类函数
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (离散数学)逻辑连接词
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (转)Linux整合apache和tomcat构建Web服务器