初识C++之内联函数 auto关键字

初识C++之内联函数 auto关键字

文章目录

  • 初识C++之内联函数 auto关键字
    • 一、 内联函数
      • 1.1 定义
      • 1.2 应用
      • 1.3 特性
    • 二、auto关键字
      • 2.1 简介
      • 2.2 auto的详细使用
      • 2.3 范围for(C++)
      • 2.4 注意事项

一、 内联函数

1.1 定义

inline修饰的函数叫做内联函数,在在编译时编译器会在调用内联函数的地方展开,类似宏,没有函数调用建立栈帧的开销,内联函数提升了程序的效率

1.2 应用

示例:

#include <iostream>
using namespace std;//inline int Add(int x,int y)
int Add(int x, int y)
{int ret = x + y;return ret;
}
int main()
{int ret = Add(3, 5);cout << ret << endl;return 0;
}

没使用内联函数:是通过call 函数名 来调用函数
在这里插入图片描述
使用内联函数:在调用函数的地方展开,直接加
在这里插入图片描述

1.3 特性

  1. 内联函数对编译器来说只是一个建议,并不是加上inline,编译器就会当作内联函数处理,只有一些短的函数,不递归且频繁调用的函数会使用作内联函数
  2. 内联函数是一种用空间换时间的方法,在编译时,会展开内联函数替换函数调用,缺点:可能会使目标文件变大 优点:不需要建立函数栈帧,提升了程序的效率
  3. 内联函数的声明和定义不能分离,如果分离了,在inline被展开的时候,就找不到函数地址了,会造成链接错误

二、auto关键字

2.1 简介

auto作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得

TIPS:可以使用typeid(变量名).name()来查看auto的实际类型

#include <iostream>
using namespace std;int Add(int x, int y)
{return x + y;
}
int main()
{auto a = 10;auto b = 'x';auto c = &a;auto d = Add(3,5);cout << typeid(a).name() << endl;cout << typeid(b).name() << endl;cout << typeid(c).name() << endl;cout << typeid(d).name() << endl;return 0;
}

代码运行结果:
int
char
int *
int

2.2 auto的详细使用

  1. auto与指针和引用
#include <iostream>
using namespace std;int main()
{auto a = 10;auto b = &a;auto* c = &a;auto& d = a;cout << typeid(a).name() << endl;cout << typeid(b).name() << endl;cout << typeid(c).name() << endl;cout << typeid(d).name() << endl;return 0;
}

代码运行结果:
int
int *
int *
int

TIPS:auto用来声明指针类型时,auto 与 auto* 是没有区别的,但是auto声明引用时,只能是 auto&

  1. auto声明多个变量
#include <iostream>
using namespace std;int main()
{auto a = 10, b = 20;//auto c = 30, d = 40.0; 报错cout << typeid(a).name() << endl;cout << typeid(b).name() << endl;return 0;
}

在一次声明多个变量时,变量类型得一致,因为编译器只能对一个类型进行推导,然后再用推导出来的类型定义其他变量

2.3 范围for(C++)

普通的打印数组:

#include <iostream>
using namespace std;int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){cout << arr[i] << " ";}return 0;
}

范围for打印数组:

#include <iostream>
using namespace std;int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };for (auto e : arr){cout << e << " ";}return 0;
}

范围for有两个部分组成

  1. auto e 范围内用于迭代的变量
  2. arr 被迭代的范围

注意:
范围for是将数组中的值赋值给变量,不能修改数组的值,所以可以在变量前加上引用& auto& e
和普通的for循环一样,可以使用 break 跳出循环 和 continue 结束本次循环

2.4 注意事项

  1. auto定义变量时,必须初始化,在编译阶段,编译器会根据初始化表达式来推到auto的类型,因此,auto只是一个类型声明时的占位符,在编译阶段会替换成实际的类型
  2. auto不能作为函数的返回值
  3. auto不能用来声明数组

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

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

相关文章

【Quartz】Quartz定时任务框架

目录 什么是Quartz&#xff1f; Job详解 Trigger详解 1、优先级 2、misfire&#xff1a;错过触发 1&#xff09;判断条件 2&#xff09;产生原因&#xff08;可能情况&#xff09; 3&#xff09;策略 Scheduler详解 JobDataMap详解 SpringBoot整合Quartz 引入依赖 …

一文了解HTTPS的加密原理

HTTPS是一种安全的网络通信协议&#xff0c;用于在互联网上提供端到端的加密通信&#xff0c;确保数据在客户端&#xff08;如Web浏览器&#xff09;与服务器之间传输时的机密性、完整性和身份验证。HTTPS的加密原理主要基于SSL/TLS协议&#xff0c;以下详细阐述其工作过程&…

python实现简单的车道线检测

描述 python实现简单的车道线检测&#xff0c;本文章将介绍两种简单的方法 颜色阈值区域掩模canny边缘检测霍夫变换 这两种方法都能实现简单的车道线检测demo&#xff0c;注意仅仅是demo 下面的图片是用到的测试图片 方法1&#xff1a;颜色阈值&#xff08;Color Selection…

802.1X认证原理

IEEE802 LAN/WAN委员会为解决无线局域网网络安全问题&#xff0c;提出了802.1X协议。后来&#xff0c;802.1X协议作为局域网接口的一个普通接入控制机制在以太网中被广泛应用&#xff0c;主要解决以太网内认证和安全方面的问题。 802.1X协议是一种基于接口的网络接入控制协议。…

喜讯|我司再次获得国家发明专利,硬核科技研发成果呈加速度增长

热烈祝贺 璞华软件成功获得国家发明专利 我司自主研发成果《一种工伤案件裁决书的生成方法及装置》&#xff08;专利号&#xff1a;ZL 2019 1 1170975.8&#xff09;成功获得国家发明专利&#xff0c;2024年4月成功获得专利证书。 发明人&#xff1a;高志凯&#xff1b;杨德…

小程序面试题之项目业务流程9道

1.视频、音频等内容的播放状态存储操作流程一般如何 在进行音、视频播放的时候会涉及到播放不同的音、视频内容 一般会要求应用能够记录每一个音、视频播放的历史记录点&#xff0c;以便于下次播放可以从指定位置开始 我们可以将音、视频播放的记录存储于本地缓存当中&#xff…

OSCP靶场--RPC1

OSCP靶场–RPC1 考点 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC 192.168.227.236 -p- -Pn --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-14 22:21 EDT Nmap scan report for 192.168.227.236 Host is up (0.14s latency). …

移动开发避坑指南——内存泄漏

在日常编写代码时难免会遇到各种各样的问题和坑&#xff0c;这些问题可能会影响我们的开发效率和代码质量&#xff0c;因此我们需要不断总结和学习&#xff0c;以避免这些问题的出现。接下来我们将围绕移动开发中常见问题做出总结&#xff0c;以提高大家的开发质量。本系列文章…

【产品经理修炼之道】- 厂商银业务之保兑仓

保兑仓 保兑仓是指供应商、购货商、银行签订三方协议&#xff0c;以银行信用为载体&#xff0c;以银行承兑汇票为结算工具&#xff0c;由银行控制货权&#xff0c;供应商受托保管货物并对银行承兑汇票保证金以外部分以货物回购为担保措施&#xff0c;购货商随缴保证金随提货而设…

不再写满屏import导入

密密麻麻的import语句不仅仅是一种视觉上的冲击&#xff0c;更是对代码组织结构的一种考验。 我们是如何做到让import“占领满屏“的了&#xff0c;又该如何优雅地管理这些import语句呢&#xff1f; 本文将从产生大量import语句的原因、可能带来的问题以及如何优化和管理impo…

Windows上的类似clock_gettime(CLOCK_MONOTONIC)的高精度测量时间函数

2024年4月11更新 感谢评论提醒&#xff0c;我之前写《如何在C/C中测量一个函数或者功能的运行时间&#xff08;串行和并行&#xff0c;以及三种方法的实际情况对比&#xff09;》的时候只实验了 Linux 和 Mac 这种类 Unix 系统&#xff0c;没考虑到 Windows。 本文只考虑第一方…

总结java中的synchronized锁

目录 synchronized的特性 synchronized的锁机制 synchronized的使用 synchronized的特性 synchronized主要有三大特性&#xff1a; 面试时经常拿synchronized关键字和volatile关键字的特性进行对比&#xff0c;synchronized关键字可以保证并发编程的三大特性&#xff1a;原子…