`

C++中的内联函数inline

 
阅读更多

  在c++中,为了解决一些频繁调用的小函数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数。
  可能说到这里,很多人还不明白什么是栈空间,其实栈空间就是指放置程序的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的,如果频繁大量的使用就会造成因栈空间不足所造成的程序出错的问题,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。
  下面我们来看一个例子:

#include <iostream>
#include <string>
using namespace std;
 
inline string dbtest(int a); //函数原形声明为inline即:内联函数
 
 
void main() {
    for (int i=1;i<=10;i++)
    {
        cout << i << ":" << dbtest(i) << endl;
    }
    cin.get();
 
}
 
string dbtest(int a)//这里不用再次inline,当然加上inline也是不会出错的
{
    return (a%2>0)?"奇":"偶";
 
}

 

inline的原理

  上面的例子就是标准的内联函数的用法,使用inline修饰带来的好处我们表面看不出来,其实在内部的工作就是在每个for循环的内部所有调用dbtest(i)的地方都换成了(i%2>0)?"奇":"偶"这样就避免了频繁调用函数对栈内存重复开辟所带来的消耗。

 

inline的限制
  说到这里很多人可能会问,既然inline这么好,还不如把所谓的函数都声明成inline,嗯,这个问题是要注意的,inline的使用是有所限制的,inline只适合函数体内代码简单的函数使用,不能包含复杂的结构控制语句例如while switch,并且不能内联函数本身不能是直接递归函数(自己内部还调用自己的函数)。


inline vs. #define
  说到这里我们不得不说一下在c语言中广泛被使用的#define语句,是的define的确也可以做到inline的这些工作,但是define是会产生副作用的,尤其是不同类型参数所导致的错误,由此可见inline有更强的约束性和能够让编译器检查出更多错误的特性,在c++中是不推荐使用define的

分享到:
评论

相关推荐

    c++中的内联函数inline用法实例

    在本篇文章里小编给大家整理的是关于c++中的内联函数inline用法实例以及相关知识点,有需要的朋友们学习下。

    C++ 实验1 重载函数和内联函数的应用 

    ② 利用内联函数编程求出自然数1~10中各个数的立方值 实验总结: 1、掌握了重载函数概念及用法。C++ 允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(Function Overloading)。借助...

    内联函数-14.08.25

    对 C++ 内联函数进行了说明

    c++内联函数(inline)使用详解

    主要介绍了c++内联函数(inline)使用详解,需要的朋友可以参考下

    详解C++中的内联函数和函数重载

    这种在函数调用处直接嵌入函数体的函数称为内联函数(inline function),又称内嵌函数或内嵌函数。 指定内联函数的方法很简单,只需要在定义函数时增加 inline 关键字。 注意:是在函数定义时增加 inline 关键字,...

    C++内联汇编示例

    工程主要时C++内联汇编的示例,内部简单的用汇编实现了函数传参及调用,循环以及if语句的实现

    C++编程中队内联函数的理解和使用

    主要介绍了C++编程中队内联函数的理解和使用,简单举例讲解了inline关键字引出的内联函数的相关知识,需要的朋友可以参考下

    C++中inline函数详解

    本文主要记录了C++中的inline函数,也就是内联函数,主要记录了以下几个问题: 一、C++为什么引入inline函数? 主要目的:用它代替C语言中表达式形式的宏定义来解决程序中函数调用的效率问题。 C语言中的宏定义:#...

    详解C++中的inline用法

    在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数。 栈空间就是指放置程序的局部数据(也就是函数内数据)的内存空间。 在系统下,栈空间是有限...

    C++ 关键字 inline详细介绍

    1. 内联函数 在C++中我们通常定义以下函数来求两个整数的最大值: 代码如下:int max(int a, int b){ return a &gt; b ? a : b;} 为这么一个小的操作定义一个函数的好处有: ① 阅读和理解函数 max 的调用,要比读一...

    52_虚函数可以声明为inline吗1

    class Derived :public Base {//从语法上讲,这可以写成inline,只是当基类指针调派类时,不能内联,编译器会动忽略掉inline/

    如何区分C++中的inline和#define宏

    (1)什么是内联函数?...1、 inline 定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换,(像宏一样展开),没有了调用的开销,效率也很高。 2、 很明显,类的内联函数也是一个真

    c++中inline的用法分析

    在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联。 inline int min(int first, int secend) {/****/};inline函数对编译器而言必须是可见的,以便它能够在调用点内展开该函数。与非inline...

    C/C++中static,const,inline三种关键字详细总结

    一、关于staticstatic 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因、作用谈起,全面分析static 修饰符的实质。 static 的两大作用: 一、控制存储方式 static...

    C++类的内联成员函数应放在哪

    复习C++ Primer的时候,看到了关于C++类的内联成员函数的放置,应该放在头文件中。那么这到底是为什么呢?仅仅是一种代码规范问题还是必须这样做呢?  下面我来讲讲我自己的理解吧。要彻底理解这个问题,首先要...

    inline hook内联汇编dll之屏蔽记事本粘贴功能

    inline hook内联汇编dll之屏蔽记事本粘贴功能,HOOKAPI函数SetClipboardData源代码,编译环境是VS05版

    vscode-inline-parameters:Visual Studio Code的扩展,在调用函数时添加内联参数注释

    VSCode的内联参数 Visual Studio Code的扩展,在调用函数时添加内联参数注释。 这是所的功能,可以在阅读代码时为您提供更多的上下文,从而通过内联显示参数名称更容易理解不同的功能参数所指的是什么。 您再也不必...

Global site tag (gtag.js) - Google Analytics