C++入门系列-内联函数

news2024/10/7 14:32:30

🌈个人主页:羽晨同学 

💫个人格言:“成为自己未来的主人~”  

以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内敛函数的地方展开,这就意味着使用内联函数可以提升程序的运行的效率,减小了调用所需要的时间。

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
int ADD(int a, int b)
{
	return a + b;
}
int main()
{
	int ret = ADD(1,2);
	return 0;
}

 这个是未使用inline的汇编代码的情况,我们可以看到,它这里ADD是不会进行替换的。

下面显示的代码是inline修饰后的代码,大家可以观察一下,有什么问题

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
inline int ADD(int a, int b)
{
	return a + b;
}
int main()
{
	int ret = ADD(1,2);
	return 0;
}

 我们可以看到在使用了inline之后,ADD函数就进行了替换。

特性

Inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势,少了调用开销,提高程序运行效率。

inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,一般建议,将函数规模小的(即函数不是很长,具体没有准确的说法,取决于编译器内部实现),不是递归,且频繁调用的函数采用inline修饰,否则编译器会忽略Inline特性。

inline不建议生命和定义分离,分离会导致链接错误,因为inline被展开,就没有函数地址了,链接就找不到了。

会显示连接错误

main.cpp

#define _CRT_SECURE_NO_WARNINGS
#include"f.h"
inline int ADD(int a, int b)
{
	return a + b;
}

int main()
{
	f(10);
	//int ret = ADD(1,2);
	return 0;
}

f.h

#pragma once
#include<iostream>
using namespace std;
inline int f(int i);

f.cpp

#define _CRT_SECURE_NO_WARNINGS
#include"f.h"
int f(int i)
{
	return i;
}

 宏的优缺点:

优点:

增强代码的复用性

提高性能

缺点:

不方便调试宏(因为预编译阶段进行了宏替换)

导致代码可读性差,可维护性差,容易误用

没有类型安全的检查

C++有哪些结束可以替代宏

常量定义,换用const enum

短小函数定义,换用内联函数

 

 

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

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

相关文章

微软开源 MS-DOS「GitHub 热点速览」

上周又是被「大模型」霸榜的一周&#xff0c;各种 AI、LLM、ChatGPT、Sora、RAG 的开源项目在 GitHub 上“争相斗艳”。这不 Meta 刚开源 Llama 3 没几天&#xff0c;苹果紧跟着就开源了手机端大模型&#xff1a;CoreNet。 GitHub 地址&#xff1a;github.com/apple/corenet 开…

如何判断自己是不是表演型人格障碍?

表演型人格障碍&#xff0c;也叫寻求注意&#xff0c;寻求关注型人格&#xff0c;癔症型人格&#xff0c;是比较常见的人格障碍类型之一。其核心特征包括有&#xff1a;过分的情绪化&#xff0c;夸张的表现形式&#xff0c;渴望成为别人的关注点&#xff0c;其行为往往是幼稚的…

HDR和WDR有什么区别

HDR指高动态范围成像&#xff0c;与之相对的还有一个概念WDR&#xff08;wide dynamic range&#xff09;宽动态范围成像&#xff0c;从概念上来说二者并无本质区别&#xff0c;为了提高图像的动态范围&#xff0c;解决光照条件不一致时图像过暗或过亮的问题。但它们的原理和应…

QT5带UI的常用控件

目录 新建工程&#xff0c;Qmainwindow带UI UI设计器 常用控件区 Buttons 按钮 containers 容器 控件属性区域 对象监视区 布局工具区 信号与槽区 简单例子1 放置一个按钮控件&#xff0c;改文本为发送&#xff0c;该按键为Button1&#xff1b; 按钮关联信号和…

DRF版本组件源码分析

DRF版本组件源码分析 在restful规范中要去&#xff0c;后端的API中需要体现版本。 3.6.1 GET参数传递版本 from rest_framework.versioning import QueryParameterVersioning单视图应用 多视图应用 # settings.pyREST_FRAMEWORK {"VERSION_PARAM": "versi…

C 深入指针(1)

目录 一、const 1、const修饰变量 2、const修饰指针 2.1 const int* p&#xff08;int const* p&#xff09; 2.2 int* const p 2.3 结论 二、指针运算 1、指针 - 整数 2、指针 - 指针 3、指针的关系运算 三、指针的使用 1、模拟实现 strlen 2、传值调用和传址调用…

读天才与算法:人脑与AI的数学思维笔记16_音乐图灵测试

1. 艾米 1.1. 人工智能作曲家 1.1.1. 分析机可能会生成任意复杂程度、精细程度的科学的音乐作品 1.1.1.1. 阿达洛夫莱斯 1.1.2. 巴赫的作品是大多数作曲家开始学习创作的起点&#xff0c;也是大多数计算机开始学习作曲的起点…

汽车车灯罩通常使用的主要材料包括什么?汽车车灯的灯罩如果破损破裂破洞了要怎么修复?

1.聚碳酸酯&#xff08;PC&#xff09;&#xff1a;PC具有高强度、高韧性和耐冲击性&#xff0c;因此常用于汽车车灯的外罩和透镜部分。它还具有良好的透光性&#xff0c;使得车灯能够有效地发光。 2.丙烯酸酯&#xff08;PMMA&#xff09;&#xff1a;PMMA&#xff0c;也称为…

基于GWO灰狼优化的CNN-LSTM-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络&#xff08;CNN&#xff09;在时间序列中的应用 4.2 长短时记忆网络&#xff08;LSTM&#xff09;处理序列依赖关系 4.3 注意力机制&#xff08;Attention&#xff09; 4…

SpringBoot实现图片上传(个人头像的修改)

SpringBootlayui实现个人信息头像的更改 该文章适合对SpringBoot&#xff0c;Thymeleaf&#xff0c;layui入门的小伙伴 废话不多说&#xff0c;直接上干货 Springbootlayui实现头像更换 前端公共部分代码 HTML页面代码 <div class"layui-card-header" style&quo…

[实例] Unity Shader 利用顶点着色器模拟简单水波

我们都知道顶点着色器可以用来改变模型各个顶点的位置&#xff0c;那么本篇我们就利用顶点着色器来做一个模拟简单水波的应用。 1. 简谐运动 在进行模拟水波之前&#xff0c;我们需要了解简谐运动&#xff08;Simple Harmonic Motion&#xff09;公式&#xff1a; 其中&#…

有公网IP的好处?

1. 维护远程连接需求的解决方案 公网IP是指可以通过互联网直接访问的IP地址&#xff0c;相对于私有IP地址而言具有重要的好处。公网IP的最大好处之一是解决了各行业客户的远程连接需求。由于天联组网操作简单、跨平台应用、无网络要求以及独创的安全加速方案等原因&#xff0c…

Python 全栈体系【四阶】(三十八)

第五章 深度学习 八、目标检测 3. 目标检测模型 3.2 YOLO 系列 3.2.1 YOLOv1&#xff08;2016&#xff09; 3.2.1.1 基本思想 YOLO&#xff08;You Only Look Once &#xff09;是继 RCNN&#xff0c;fast-RCNN 和 faster-RCNN 之后&#xff0c;Ross Girshick 针对 DL 目…

人工智能论文:BERT和GPT, GPT-2, GPT-3 的简明对比和主要区别

在BERT的论文里面&#xff1a; 2018.10 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding&#xff0c;BERT已经解释了BERT&#xff0c;GPT&#xff0c;ELMo的区别。 *ELMo为双向RNN&#xff0c;请忽略。 主要区别&#xff1a; BERT使用的是…

Qt QLCDNumber详解

1.简介 它提供了一个显示数字的显示屏控件&#xff0c;效果类似于现实世界中的液晶显示屏。它可以显示任何大小的数字。它可以显示十进制、十六进制、八进制或二进制数字。可以用setMode更改基数&#xff0c;用setSmallDecimalPoint更改小数点。 2.常用方法 以下是一些常用的…

nginx--第三方模块安装上传下载服务

第三方模块安装 准备 cd /usr/local/src/ yum install git -y git clone https://github.com/openresty/echo-nginx-module.git cd nginx-1.24.0 yum -y install perl-devel perl-ExtUtils-Embed zlib-devel gcc-c libtool openssl openssl-devel 编译安装 ./configure \--p…

【深度学习基础(2)】深度学习之前:机器学习简史

文章目录 一. 深度学习的起源1. 概率建模--机器学习分类器2. 早期神经网络--反向传播算法的转折3. 核方法 -- 忽略神经网络4. 决策树、随机森林和梯度提升机5. 神经网络替代svm与决策树 二. 深度学习与机器学习有何不同 可以这样说&#xff0c;当前工业界所使用的大部分机器学习…

Web安全研究(七)

NDSS 2023 开源地址&#xff1a;https://github.com/bfpmeasurementgithub/browser-fingeprint-measurement 霍普金斯大学 文章结构 introbackground threat model measurement methodology step1: traffic analysisstep2: fingerprint analysis dataset attack statisticsbro…

【通信中间件】Fdbus HelloWorld实例

Fdbus实例教程 Fdbus简介 Fdbus 全称 Fast Distributed Bus&#xff08;高速分布式总线&#xff09;&#xff0c;提供IPCRPC功能。适用于多种OS&#xff1a; LinuxQNXAnroidOSWindow Fdbus本质是Socket&#xff0c;IPC基于Unix domain socket&#xff0c;RPC基于TCP。使用G…

诺基亚贝尔探访上海斯歌,共探创新合作新机遇

近日&#xff0c;上海斯歌K2 BPM迎来重要客户考察交流活动。来自诺基亚贝尔的首席数字官刘少勇一行莅临了上海斯歌K2 BPM 的武汉研发中心&#xff0c;并对上海斯歌在BPM业务流程管理领域的研发成果及交付能力给予了高度肯定。 此次活动不仅加深了双方的战略合作&#xff0c;也为…