iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++的内联函数怎么使用
  • 184
分享到

C++的内联函数怎么使用

2023-06-30 08:06:02 184人浏览 独家记忆
摘要

本文小编为大家详细介绍“c++的内联函数怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++的内联函数怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、常量与宏回顾C++中的const常量可以替

本文小编为大家详细介绍“c++的内联函数怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++的内联函数怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、常量与宏回顾

C++中的const常量可以替代宏常数定义,如︰

C++的内联函数怎么使用

但是C++中是否有解决方替代宏代码片段呢?这里就要引入内联函数。

二、内联函数

  • C++中推荐使用内联函数替代宏代码片段

  • C++中使用 inline 关键字声明内联函数

C++的内联函数怎么使用

内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求

  • C++编译器可以将一个函数进行内联编译

  • 被C++编译器内联编译的函数叫做内联函数

  • C++编译器直接将函数体插入函数调用的地方

  • 内联函数没有普通函数调用时的额外开销(压栈,跳转,返回)

C++编译器不一定满足函数的内联请求

下面先看一段宏定义的代码:

#include <stdio.h>#define FUNC(a, b) ((a) < (b) ? (a) : (b))inline int func(int a, int b){    return a < b ? a : b;}int main(int arGC, char *argv[]){    int a = 1;    int b = 3;    int c = FUNC(++a, b);    printf("a = %d\n", a);    printf("b = %d\n", b);    printf("c = %d\n", c);    return 0;}

下面为输出结果,c =FUNC(++a, b),等价于 c =((++a) < (b) ? (++a) : (b)),先执行(++a) < (b),得到 a =,2,b = 3,由于 ++a 比 b 小,所以输出 ++a,这个时候 a = 3,所以 c 也等于 3。

C++的内联函数怎么使用

如果使用内联函数,

#include <stdio.h>#define FUNC(a, b) ((a) < (b) ? (a) : (b))inline int func(int a, int b){    return a < b ? a : b;}int main(int argc, char *argv[]){    int a = 1;    int b = 3;    int c = func(++a, b);    printf("a = %d\n", a);    printf("b = %d\n", b);    printf("c = %d\n", c);    return 0;}

输出结果如下:

C++的内联函数怎么使用

下面在 VS2012 中看一下反汇编的代码,看一看内联有没有成功。可以看到 func 函数被调用,而不是直接扩展到被调用的地方,内联没有成功。inline 这个关键字仅仅是请求将函数内联,但是不一定会成功。

C++的内联函数怎么使用

为了让编译器允许对内联的请求,可以对编译器进行一些配置,如下图

C++的内联函数怎么使用

C++的内联函数怎么使用

配置好以后,在 int c = func(++a, b); 前面打个断点,开始跑代码,但是我跑的时候报错了。

C++的内联函数怎么使用

这个时候,进行下面配置,那个错误就解决了。

C++的内联函数怎么使用

这个时候在进行反汇编,如下图所示,可以看到调用函数的汇编代码没有了,表示内联成功了。

C++的内联函数怎么使用

  • 内联函数具有普通函数的特征(参数检查,返回类型等)

  • 函数的内联请求可能被编译器拒绝

  • 函数被内联编译后,函数体直接扩展到调用的地方

宏代码片段由预处理器处理,进行简单的文本替换,没有任何编译过程,因此可能出现副作用。

现代C++编译器能够进行编译优化,一些函数即使没有inline声明,也可能被内联编译

一些现代C++编译器提供了扩展语法,能够对函数进行强制内联,如︰

  • g++ : _attribute__((always_inline)) 属性

  • MSVC : _forceinline

三、内联函数使用注意事项

C++中 inline 内联编译的限制:

  • 不能存在任何形式的循环语句

  • 不能存在过多的条件判断语句

  • 函数体不能过于庞大

  • 不能对函数进行取址操作

  • 不能对函数进行取址操作

读到这里,这篇“C++的内联函数怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网其他教程频道。

--结束END--

本文标题: C++的内联函数怎么使用

本文链接: https://www.lsjlt.com/news/327760.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++的内联函数怎么使用
    本文小编为大家详细介绍“C++的内联函数怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++的内联函数怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、常量与宏回顾C++中的const常量可以替...
    99+
    2023-06-30
  • C++内联成员函数怎么使用
    本篇内容主要讲解“C++内联成员函数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++内联成员函数怎么使用”吧!什么是内联函数:内联函数是C++的一个增强功能,可以减少程序的执行时间。...
    99+
    2023-06-22
  • c++内联函数怎么引用
    在C++中,内联函数是通过将函数的定义放在每个调用点处进行替换,而不是通过函数调用来实现的。因此,在引用内联函数时,需要确保函数的定...
    99+
    2023-10-26
    C++
  • C#中内联函数怎么用
    这篇文章将为大家详细讲解有关C#中内联函数怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。C++ 中有个内联函数,使用 inline 来修饰函数,编译器就会对其进行优化,将此函数作为代码判断插入到调用...
    99+
    2023-06-29
  • C++引用与内联函数怎么使用
    这篇文章主要介绍“C++引用与内联函数怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++引用与内联函数怎么使用”文章能帮助大家解决问题。一、引用首先我们来看一下引用的概念:1.1引用的概念...
    99+
    2023-07-05
  • C++宏函数和内联函数的使用
    目录1. 宏常量&宏函数1.1 定义1.2 使用宏函数的注意事项2. 内联函数2.1 定义2.2 某些情况编译器不会做内联编译3. 补充3.1 宏定义和函数的区别3.2 宏定...
    99+
    2022-11-13
  • C++浅析内联函数的使用
    目录一. 概念二. 特性一. 概念 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销, 内联函数提升程序运行的效率。 在C++里...
    99+
    2022-11-13
  • inline内联函数怎么在C++项目中使用
    本篇文章为大家展示了 inline内联函数怎么在C++项目中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。指定内联函数的方法很简单,只需要在函数定义处增加 inline 关键字。请看下面的例子:...
    99+
    2023-06-06
  • C++宏函数和内联函数如何使用
    今天小编给大家分享一下C++宏函数和内联函数如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 宏常量&宏函...
    99+
    2023-07-02
  • 什么是C++内联函数
    这篇文章主要介绍“什么是C++内联函数”,在日常操作中,相信很多人在什么是C++内联函数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是C++内联函数”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!一、...
    99+
    2023-06-25
  • C++内联函数有什么作用
    这篇文章主要介绍“C++内联函数有什么作用”,在日常操作中,相信很多人在C++内联函数有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++内联函数有什么作用”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-17
  • C++内联函数inline与auto关键字怎么使用
    这篇文章主要介绍“C++内联函数inline与auto关键字怎么使用”,在日常操作中,相信很多人在C++内联函数inline与auto关键字怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++内联函数...
    99+
    2023-06-30
  • C++深入分析内联函数的使用
    目录一、常量与宏回顾二、内联函数三、内联函数使用注意事项四、小结一、常量与宏回顾 C++中的const常量可以替代宏常数定义,如︰ 但是C++中是否有解决方替代宏代码片段呢?这里就...
    99+
    2022-11-13
  • C++中的内联函数是什么
    这篇文章主要介绍C++中的内联函数是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.概念以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运...
    99+
    2023-06-29
  • C#中内联函数的用法介绍
    C++ 中有个内联函数,使用 inline 来修饰函数,编译器就会对其进行优化,将此函数作为代码判断插入到调用处。 函数调用在执行时,首先要在栈中为形参和局部变量分配存储空间,然后还...
    99+
    2022-11-13
  • C++ 引用与内联函数详情
    目录引用初阶什么是引用为何要有引用引用指向同一块空间引用的特性定义时必须初识化一个变量可以多次引用引用一旦引用了一个实例,不能在再引用其他的实例引用进阶常引用权限临时变量具有常属性引...
    99+
    2022-11-13
  • c++ 内联函数和普通函数的区别
    前言 内联函数是c++为了提高程序的运行速度做的改进,它与普通函数区别在于: 编译器如何将它们组合到程序中。所以我们需要深入到程序内部。 我们的最终的可执行程序由 一组机器指令组成...
    99+
    2022-11-12
  • C++的内联函数你了解吗
    目录1.概念2.函数演示3.函数特性总结1.概念 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率。...
    99+
    2022-11-13
  • c++内联函数和宏函数有什么区别
    C++内联函数和宏函数都可以在编译时进行函数体的替换,但是它们有以下几点区别:1. 编译时间点:宏函数在预处理阶段被展开,而内联函数...
    99+
    2023-10-19
    c++
  • C++内联钩子怎么使用
    C++中的内联钩子(Inline Hook)是一种用于修改或监视函数调用的技术。它通过修改函数的指令,使其在被调用时跳转到用户自定义...
    99+
    2023-10-24
    C++
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作