初识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不能用来声明数组

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UDP实现Mini版在线聊天室

实现原理 只有当客户端先对服务器发送online消息的时候&#xff0c;服务器才会把客户端加入到在线列表。当在线列表的用户发消息的时候&#xff0c;服务器会把消息广播给在线列表中的所有用户。而当用户输入offline时&#xff0c;表明自己要下线了&#xff0c;此时服务器把该用…

跨域问题一文解决

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Vue ⛺️稳中求进&#xff0c;晒太阳 一、为什么会出现跨域的问题&#xff1f; 是浏览器的同源策略&#xff0c;跨域也是因为浏览器这个机制引起的&#xff0c;这个机制的存在还是在于安全…

【MATLAB源码-第6期】基于matlab的QPSK的误码率BER和误符号率SER仿真。

1、算法描述 QPSK&#xff0c;有时也称作四位元PSK、四相位PSK、4-PSK&#xff0c;在坐标图上看是圆上四个对称的点。通过四个相位&#xff0c;QPSK可以编码2位元符号。图中采用格雷码来达到最小位元错误率&#xff08;BER&#xff09; — 是BPSK的两倍. 这意味著可以在BPSK系统…

利用DataX工具,实现MySQL与OceanBase的数据同步实践

数据迁移是经常遇到的需求&#xff0c;市面上为此提供了众多同步工具。这里将为大家简要介绍DataX的使用。DataX 是阿里云 DataWorks数据集成 的开源版本&#xff0c;它作为离线数据同步的工具/平台&#xff0c;在阿里巴巴集团内部被广泛应用。DataX 能够实现多种异构数据源之间…

图书馆自习室|基于SSM的图书馆自习室座位预约小程序设计与实现(源码+数据库+文档)

图书馆自习室目录 基于SSM的图书馆自习室座位预约小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、小程序端&#xff1a; 2、后台 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a…

[opencv]VideoWriter写出fourcc格式

fourcc支持的格式 fourcc全名Four-Character Codes&#xff0c;四字符代码&#xff0c;该编码由四个字符组成 cv2.VideoWriter_fourcc(O,O,O,O) cv2.VideoWriter_fourcc(*OOOO) 通常写法有上述两种形式&#xff0c;O代表一个字符&#xff0c;通常有 支持avi格式的有&#…

麒麟KOS删除鼠标右键新建菜单里不需要的选项

原文链接&#xff1a;麒麟KOS删除鼠标右键新建菜单里不需要的选项 Hello&#xff0c;大家好啊&#xff01;在日常使用麒麟KOS操作系统时&#xff0c;我们可能会发现鼠标右键新建菜单里包含了一些不常用或者不需要的选项。这不仅影响我们的使用效率&#xff0c;也让菜单显得杂乱…

【C++学习】C++11新特性(第一节)

文章目录 ♫一.文章前言♫二.C11新特性♫一.统一的列表初始化♫二.std::initializer_list♫三.声明♫四.decltype关键字♫五.nullptr♫六.新增加容器---静态数组array、forward_list以及unordered系列♫6.1unordered_map与unoredered_set♫6.2array♫6.3 forward_list&#xff…

上海亚商投顾:创业板指低开低走 低空经济概念股尾盘拉升

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数昨日集体调整&#xff0c;沪指午后跌超1%&#xff0c;深成指、创业板指盘中跌超2%&#xff0c;尾盘跌…

计算机视觉——基于深度学习UNet实现的复杂背景文档二值化算法实现与模型训练

1. 引言 阈值分割可以被视为一个分类问题&#xff0c;通常涉及两个类别&#xff0c;这也是为什么阈值分割也被称为二值化。对于文档图像&#xff0c;我们期望阈值算法能够正确地将墨水分类为黑色&#xff0c;将纸张分类为白色&#xff0c;从而得到二值化图像。对于数字灰度图像…

腾讯云人脸服务开通详解:快速部署,畅享智能体验

请注意&#xff0c;在使用人脸识别服务时&#xff0c;需要确保遵守相关的法律法规和政策规定&#xff0c;保护用户的合法权益&#xff0c;并依法收集、使用、存储用户信息。此外&#xff0c;腾讯云每个月会提供一定次数的人脸识别调用机会&#xff0c;对于一般的小系统登录来说…

头歌-机器学习 第11次实验 softmax回归

第1关&#xff1a;softmax回归原理 任务描述 本关任务&#xff1a;使用Python实现softmax函数。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.softmax回归原理&#xff0c;2.softmax函数。 softmax回归原理 与逻辑回归一样&#xff0c;softmax回归同样…

(三)、PTP时间精确协议如何工作的【Part1】

1、精确时钟需要校准 一个自由运行的时钟&#xff0c;本身每次的频率也不是绝对一致的&#xff08;每次频率都会有细微的差异&#xff09;&#xff0c;相位也是未知的。时间从来不是理想的&#xff0c;想到达到一个相对理想的准确时间&#xff0c;必须对时间进行调整&#xff0…

Electron 桌面端应用的使用 ---前端开发

Electron是什么&#xff1f; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。 入门…

2024.4.8Morris中序遍历(线索二叉树)学习

这次博主在学习完知识点和代码之后&#xff0c;准备对这个知识重新进行整理总结。站在一个初学者的角度来看待这个知识点&#xff0c;在他人的讲解基础上加一点点自己的理解&#xff0c;并记录下来。以加深自己的理解&#xff0c;并且希望能够帮助到你。博主是一个初学者&#…

马云最新发声:AI时代刚刚到来,一切才刚开始,我们正当其时!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

原码一位乘法

王道考研ppt总结&#xff1a; 个人理解&#xff1a; 原码一位乘法&#xff1a; 结果符号的确定&#xff1a;符号位异或&#xff0c;很好理解 数值位绝对值相乘 小数的乘法&#xff1a; 小学乘法的规则是&#xff1a;乘数的每一位和被乘数进行相乘&#xff0c;然后作为数积&…

labelImg将图像标签显示到界面

打开View的显示类别 但是颜色不够清晰&#xff0c;我想自己定制 我的象棋红色和黑色两种。并且把字体方法一些。 可以看到 color self.select_line_color if self.selected else self.line_color参考&#xff1a;https://blog.csdn.net/qq_41082953/article/details/10330225…

如何使用 ArcGIS Pro 制作热力图

热力图是一种用颜色表示数据密度的地图&#xff0c;通常用来显示空间分布数据的热度或密度&#xff0c;我们可以通过 ArcGIS Pro 来制作热力图&#xff0c;这里为大家介绍一下制作的方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的POI数…

Gitlab全量迁移

Gitlab全量迁移 一、背景1.前提条件 一、背景 公司研发使用的Gitlab由于服务器下架需要迁移到新的Gitlab服务器上。Gitlab官方推荐了先备份然后再恢复的方法。个人采用官方的另外一种方法&#xff0c;就写这篇文章给需要的小伙伴参考。 源Gitlab: http://old.mygitlab.com #地…