C++学习日记——宏函数和内联函数

news/2024/7/7 2:15:41

学习目标

学习宏函数和内联函数的区别和使用
在这里插入图片描述


学习内容

宏函数:
使用宏定义定义出的函数,并不是真正意义上的函数
注意事项:
要保证运算的完整性
使用宏函数存在一定的缺陷
使用场景:频繁调用的短小的函数
优点:

不是函数,少了函数调用的开销,提高运行效率
可以少些代码
可以提高代码的可读性和复用性

缺点:

安全性低,可维护性差
不能进行调试
容易产生二义性
每个宏函数位置都会被展开,容易造成代码膨胀

==========================================================

内联函数:
本质上内联函数也是一个普通的函数,解决了宏定义的缺陷
关键字:inline
内联函数必须在声明和定义前都加上inline

以空间换时间

注意事项:
某些情况编译器不会做内联编译:

1、存在任何情况的循环语句
2、存在过多的条件判断语句
3、函数体过于庞大
4、对函数进行取地址操作

优点:

1、内联函数是函数,在编译阶段会进行类型检测,比较安全
2、可以进行调试
3、在编译阶段展开代码,提高运行效率·

缺点:
容易造成代码膨胀


学习代码

#include <iostream>
#include <cstring>
using namespace std;

#define max(a,b) a>b?a:b//局限性,定义函数适用于使用频繁、简单的函数

int max1(int a,int b) {//函数调用简单的表达式比较占用时间
	int aa = a > b ? a : b;
	return aa;
}
inline int max2(int a, int b) {
	return a > b ? a : b;

}


int main() {


	int max = max(1, 2);
	cout << max << endl;

	int a = max1(2,3);
	cout << a << endl;

	cout << max2(4, 5) << endl;//调用内联函数更加简便,以空间换时间


	return 0;
}

代码实现

在这里插入图片描述



http://lihuaxi.xjx100.cn/news/19230.html

相关文章

Spring Boot集成第三方登录之微博登录

Spring Boot集成第三方登录之微博登录准备工作网站接入开发者信息认证创建应用流程分析引导授权用户用户授权授权成功换取Access TokenHTTP客户端使用Access Token请求相关接口根据用户ID获取用户信息获取用户的粉丝列表Spring Boot集成微博登录添加依赖封装Token等信息创建Log…

少年,不知道怎么在安卓中使用 PaddleOCR ?看我怎么把它二次封装成只需要两行代码即可使用

前言 什么是 PaddleOCR 根据官方的介绍&#xff1a; Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80 languages recognition, provide data annotation and synthesis tools, support training and deployme…

银行 IT 架构到底要不要云化?

【摘要】银行到底是继续采用集中式架构还是全部更换成分布式架构,是继续保持现有传统架构还是改造成基于云计算的全新架构?本文用较长篇幅全面分析了集中式架构(非云化架构)和分布式架构(云化架构)的特点、优缺点,并提出了转型思路,从技术和管理两个角度给出了转型路径…

FinOps能力成熟度模型启动,灵雀云助力云原生降本增效标准制定

9月16日&#xff0c;在2022中国数据中心市场年会“降本增效分论坛”上&#xff0c;《云原生FinOps能力成熟度模型》标准正式启动&#xff0c;作为FinOps产业标准工作组首批发起成员和云原生技术领域的唯一代表企业&#xff0c;灵雀云出席并参与授牌。 随着云计算的深入&#xf…

【甄选靶场】Vulnhub百个项目渗透——项目十七:brainpan-1(windows缓冲区溢出,sudo提权)

Vulnhub百个项目渗透 Vulnhub百个项目渗透——项目十七&#xff1a;brainpan-1&#xff08;windows缓冲区溢出,sudo提权&#xff09; &#x1f525;系列专栏&#xff1a;Vulnhub百个项目渗透 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &…

Android修行手册 - TableLayout学习

往期文章分享点击跳转>《导航贴》- Unity手册&#xff0c;系统实战学习点击跳转>《导航贴》- Android手册&#xff0c;重温移动开发 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过…

JavaScript如何查找和访问HTML页面中的HTML元素

JavaScript如何查找和访问HTML页面中的HTML元素 HTML语言中&#xff0c;全部是由标签&#xff08;标记、tag&#xff09;组成的。在浏览器内部解析HTML标记时&#xff0c;会转换为成具有特定结构的HTML文档对象模型&#xff0c;这个对象模型简称为DOM&#xff08;Document Obje…

《OpenHarmony开源鸿蒙学习入门》-- 状态管理

《OpenHarmony开源鸿蒙学习入门》-- 状态管理 一、引子 最新单位开始断网办公&#xff0c;难受至极。很久没有更新博客了。平常碰到问题&#xff0c;总结梳理个文档&#xff0c;就可以顺手发个博客。现在要回家重写才行。 OpenHarmony最新发展势头很猛&#xff0c;得益于声明…