C++支持内联函数,目的是为了提高函数的执行效率,类似于C语言中的宏定义

内联函数在调用时将它在程序中的每个调用点展开,不用额外分配栈空间

内联函数的定义在一个源文件中出现一次,但在多个源文件中可以同时出现,只要保证完全相同即可。

所以内联函数可以直接在头文件中定义,即使被多次包含,也是完全相同的,因此不会报错。

inline 内联函数的使用方法:

inline 放在函数定义的返回值前面,就可以将函数指定为内联函数;仅仅放在声明函数前面时无效的

inline 返回值 函数名(形参)
{
函数体
}

举例:

#include <iostream>

using namespace std;

// add 函数定义时有inline,声明时没有inline,但依然是内联函数
int add(int a, int b);
// dec 函数定义时没有inline,声明时有inline,但依然不是内联函数
inline int dec(int a, int b); inline int add(int a, int b)
{
return (a + b);
} int dec(int a, int b)
{
return (a - b);
} int main(void)
{
// 调用add(2, 3)时直接被替换为(2 + 3)
cout << add(, ) << endl;
// 调用时不会替换,要进行压栈出栈操作
cout << dec(, ) << endl; return ;
}

注意:

1、内联函数以代码增大的代价减少函数调用的开销,禁止滥用,只有函数体简单短小,才可以使代码更加高效

2、如果函数代码较长或有循环语句,使用内联函数会增大内存的消耗,不能使用内联函数

宏定义与内联函数的区别

1、宏定义是由预处理器控制实现,而内联函数是通过编译器控制实现

2、宏定义在预处理时就对其进行展开替换,而内联函数是在调用时对其展开替换

3、内联函数是真正的函数,但使用时像宏定义一样展开,取消了函数的参数压栈出栈的开销

4、宏定义不检查参数返回值等,只是对其展开,而内联函数会检查参数返回值等,相对更安全

5、宏定义在运行时不可以调试,而内联函数可以

[C++] inline内联函数使用方法的更多相关文章

  1. inline 内联函数

    1.目的: 引入内联函数的目的是为了解决程序中函数调用的效率问题. 函数的引入可以减少程序的目标代码,实现程序代码和数据的共享.但是,函数调用也会带来降低效率的问题,因为调用函数实际上将程序执行顺序转 ...

  2. c++——inline内联函数

    1 inline内联函数 C++中的const常量可以替代宏常数定义,如: const int A = 3;  #define A 3 C++中是否有解决方案替代宏代码片段呢?(替代宏代码片段就可以 ...

  3. C++语言基础(7)-inline内联函数

    函数调用是有时间和空间开销的.程序在执行一个函数之前需要做一些准备工作,要将实参.局部变量.返回地址以及若干寄存器都压入栈中,然后才能执行函数体中的代码:函数体中的代码执行完毕后还要清理现场,将之前压 ...

  4. CG_INLINE,inline 内联函数

    内联函数,即在编译的时候将函数体替换函数调用,从而不需要将parameter,return address进行push/pop stack的操作,从而加速app的运行,然而,会增加二进制文件的大小. ...

  5. (inline)内联函数在IOS开发中的使用

    今天在阅读YYKit源码(https://github.com/ibireme/YYKit.git)时发现在YYKitMacro.h组件中大量使用的内联函数,例如此文件中的一个函数 static in ...

  6. inline内联函数

    demo //带参数的宏 #define MYFUNC(a, b) ((a) < (b) ? (a) : (b)) inline int myfunc(int a, int b) { retur ...

  7. C++ inline内联函数

    inline 函数避免函数调用的开销 // find longer of two strings const string &shorterString(const string &s ...

  8. 《C++ Primer》笔记-inline内联函数

    inline 函数避免函数调用的开销 // find longer of two strings const string &shorterString(const string &s ...

  9. C++对C语言的拓展(2)—— inline内联函数

    C语言中有宏函数的概念.宏函数的特点是内嵌到调用代码中去,避免了函数调用 的开销.但是由于宏函数的处理发生在预处理阶段,缺失了语法检测和有可能带来的语意差错. 1.内联函数基本概念 C++提供了 in ...

随机推荐

  1. 【转】Vue.js——60分钟组件快速入门(上篇)

    文章作者:keepfool 文章出处:http://www.cnblogs.com/keepfool/ 组件简介 组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的 ...

  2. Android EventBus使用大全

    添加依赖 implementation 'org.greenrobot:eventbus:3.1.1' public class HuaDongActivity extends Activity { ...

  3. 基于Text-CNN模型的中文文本分类实战 流川枫 发表于AI星球订阅

    Text-CNN 1.文本分类 转眼学生生涯就结束了,在家待就业期间正好有一段空闲期,可以对曾经感兴趣的一些知识点进行总结. 本文介绍NLP中文本分类任务中核心流程进行了系统的介绍,文末给出一个基于T ...

  4. docker实战 (3) 常规配置

    本节会持续更新,在项目实战中遇到的docker配置都会更新进来 docker常用命令: docker 介绍: what: 是什么 why: 为什么用 how: 怎么用 docker 特点: 轻量级,可 ...

  5. 【故障解决】enq: PS - contention

    [故障解决]enq: PS - contention 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能, ...

  6. prometheus-redis-exporter监控redis

    chart地址:https://github.com/helm/charts/tree/master/stable/prometheus-redis-exporter 1.下载chart包 $ hel ...

  7. SHELL脚本编程-字符串处理

    SHELL脚本编程-字符串处理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符串切片 [root@node101.yinzhengjie.org.cn ~]# echo { ...

  8. 使用Arduino连接HC-SR04超声波距离传感器的方法

    距离传感器是机器人项目最有用的传感器之一. HC-SR04是一种便宜的超声波距离传感器,可以帮助您的机器人在房间周围导航.通过一些努力和一个额外的组件,它也可以用作测量设备.在这篇文章中,您将学习到通 ...

  9. The Tower(HDU6559+2018年吉林站+数学)

    题目链接 传送门 题意 告诉你圆锥的底部圆的半径和圆锥的高,再给你一个点的坐标及其运动向量,问你这个点什么时候会与这个圆锥相撞. 思路 比赛场上二分一直没过但是有人二分过了,今天再写这题想再试下二分, ...

  10. linux的后台运行相关命令

    screen -S name 创建一个名为name的后台,或者说bash面板,在这上面运行的任务不会因为连接断开而退出,且保留bash上的信息 screen -ls 列出所有的screen scree ...