广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++内联函数有什么作用
  • 859
分享到

C++内联函数有什么作用

2023-06-17 17:06:37 859人浏览 薄情痞子
摘要

这篇文章主要介绍“c++内联函数有什么作用”,在日常操作中,相信很多人在C++内联函数有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++内联函数有什么作用”的疑惑有所帮助!接下来,请跟着小编一起来

这篇文章主要介绍“c++内联函数有什么作用”,在日常操作中,相信很多人在C++内联函数有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++内联函数有什么作用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

C++内联函数既能够去除函数调用所带来的效率负担又能够保留一般函数的优点。然而,内联函数并不是***药,在一些情况下,它甚至能够降低程序的性能。因此在使用的时候应该慎重。

1.我们先来看看内联函数给我们带来的好处:从一个用户的角度来看,内联函数看起来和普通函数一样,它可以有参数和返回值,也可以有自己的作用域,然而它却不会引入一般函数调用所带来的负担。另外,它可以比宏更安全更容易调试。

当然有一点应该意识到,inline specifier仅仅是对编译器的建议,编译器有权利忽略这个建议。那么编译器是如何决定函数内联与否呢?一般情况下关键性因素包括函数体的大小,是否有局部对象被声明,函数的复杂性等等。

2.那么如果一个函数被声明为inline但是却没有被内联将会发生什么呢?理论上,当编译器拒绝内联一个函数的时候,那个函数会像普通函数一样被对待,但是还会出现一些其他的问题。例如下面这段代码:

  1. // filename Time.h   

  2. #include< ctime>   

  3. #include< iOStream>   

  4. using namespace std;   

  5. class Time   

  6. {   

  7. public:   

  8. inline void Show() { for (int i = 0; i< 10; i++) 
    cout< < time(0)< < endl;}   

  9. }; 

因为成员函数Time::Show()包括一个局部变量和一个for循环,所以编译器一般拒绝inline,并且把它当作一个普通的成员函数。但是这个包含类声明的头文件会被单独的#include进各个独立的编译单元中:

// filename f1.cpp   #include "Time.hj"   void f1()   {   Time t1;   t1.Show();   }   // filename f2.cpp   #include "Time.h"   void f2()   {   Time t2;   t2.Show();   }

结果编译器为这个程序生成了两个相同成员函数的拷贝:

void f1();   void f2();   int main()   {   f1();   f2();   return 0;   }

当程序被链接的时候,linker将会面对两个相同的Time::Show()拷贝,于是函数重定义的连接错误发生。但是老一些的C++实现对付这种情况的办法是通过把一个un-inlined函数当作static来处理。因此每一份函数拷贝仅仅在自己的编译单元中可见,这样链接错误就解决了,但是在程序中却会留下多份函数拷贝。在这种情况下,程序的性能不但没有提升,反而增加了编译和链接时间以及最终可执行体的大小。

但是幸运的是,新的C++标准中关于un-inlined函数的说法已经改变。一个符合标准C++实现应该只生成一份函数拷贝。然而,要想所有的编译器都支持这一点可能还需要很长时间。

另外关于C++内联函数还有两个更令人头疼的问题。***个问题是该如何进行维护。一个函数开始的时候可能以内联的形式出现,但是随着系统的扩展,函数体可能要求添加额外的功能,结果内联函数就变得不太可能,因此需要把inline specifier去除以及把函数体放到一个单独的源文件中。另一个问题是当内联函数被应用在代码库的时候产生。当内联函数改变的时候,用户必须重新编译他们的代码以反映这种改变。然而对于一个非内联函数,用户仅仅需要重新链接就可以了。

这里想要说的是,内联函数并不是一个增强性能的灵丹妙药。只有当函数非常短小的时候它才能得到我们想要的效果,但是如果函数并不是很短而且在很多地方都被调用的话,那么将会使得可执行体的体积增大。最令人烦恼的还是当编译器拒绝内联的时候。在老的实现中,结果很不尽人意,虽然在新的实现中有很大的改善,但是仍然还是不那么完善的。一些编译器能够足够的聪明来指出哪些函数可以内联哪些不能,但是,大多数编译器就不那么聪明了,因此这就需要我们的经验来判断。如果C++内联函数不能增强行能,就避免使用它!

到此,关于“C++内联函数有什么作用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: C++内联函数有什么作用

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

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

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

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

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

  • 微信公众号

  • 商务合作