`

C++内联函数(内嵌函数,内置函数)

    博客分类:
  • C++
 
阅读更多
调用函数时需要一定的时间和空间的开销。C++提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联函数(inline function),又称内嵌函数或内嵌函数。

指定内联函数的方法很简单,只需要在定义函数时增加 inline 关键字。

注意:是在函数定义时增加 inline 关键字,而不是在函数声明时。在函数声明时增加 inline 关键虽然没有错误,但是也没有任何效果

inline 关键字放在函数声明处不会起作用:
inline void swap(int &a, int &b);
void swap(int &a, int &b)
{
    int temp = a;
    a = b;
    b = temp;
}
inline 关键字应该与函数体放在一起:
void swap(int &a, int &b);
inline void swap(int &a, int &b)
{
    int temp = a;
    a = b;
    b = temp;
}


采用内联函数可以有效避免函数调用的开销,程序执行效率更高。使用内联函数的缺点就是,如果被声明为内联函数的函数体非常大,则编译器编译后程序的可执行码将会变得很大。

另外,如果函数体内出现循环或者其它复杂的控制结构的时候,这个时候处理这些复杂控制结构所花费的时间远大于函数调用所花的时间,因此如果将这类函数声明为内联函数意义不大,反而会使得编译后可执行代码变长。

通常在程序设计过程中,我们会将一些频繁被调用的短小函数声明为内联函数。

应当说明:对函数作inline声明,只是程序员对编译系统提出的一个建议,也就是说它是建议性的,而不是指令性的。并非一经指定为inline,编译系统就必须这样做。编译系统会根据具体情况决定是否这样做。

一个完整的示例:
#include <iostream>
using namespace std;
int max(int, int, int); //函数声明,左端也可以加inline
int main( )
{
   int i=10, j=20, k=30, m;
   m = max(i, j, k);
   cout<<"max="<<m<<endl;
   return 0;
}
inline int max(int a, int b, int c) //定义max为内联函数
{
   if(b>a) a=b;
   if(c>a) a=c;
   return a;
}

运行结果:
max=30

由于在定义函数时指定它为内置函数,因此编译系统在遇到函数调用“max(i, j, k)”时,就用max函数体的代码代替“max(i,j, k)”,同时将实参代替形参。
这样,程序第6行 “m=max(i, j, k);”就被置换成:
    if (j>i) i=j;
    if(k>i) i=k;
    m=i;
分享到:
评论

相关推荐

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

    内联函数(内嵌函数,内置函数) 调用函数时需要一定的时间和空间的开销。C++提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联...

    Carry-1#CPP-learning#内置函数1

    这种嵌入到主调函数中的函数称为内置函数,又称内嵌函数。在有些书中称之为内联函数指定内联函数时,只需在函数首行的左端加一个关键字 inline 即可。示例程序1:

    C++第8章函数探幽.docx

    内联函数是C++为提升程序执行效率而引入的一个重要特性。通常情况下,当一个函数被调用时,程序会经历以下步骤: 1. **存储当前指令的位置**:在函数调用之后立即保存指令的内存地址。 2. **传递参数**:将函数所需...

    DSP编程技巧之--从C/C++代码调用汇编代码中的函数与变量

    内联函数适用于简单的一行或多行汇编代码,避免了函数调用的开销。在C/C++中,我们可以使用`asm`关键字插入汇编代码,例如: ```cpp asm("EALLOW"); asm("EDIS"); ``` 这在DSP编程中常见于`EALLOW`和`EDIS`这样的...

    x64下实现内嵌汇编

    在x64系统中实现内嵌汇编,即在高级语言(如C++或C)的源代码中直接插入汇编代码,可以用于优化特定性能敏感的代码段或执行一些硬件直接交互的任务。 内嵌汇编的基本原理是将汇编语言指令与高级语言代码混合编写,...

    在 Visual C++ 中使用内联汇编.pdf

    在Visual C++中,内联汇编是内置特性,无需额外配置独立的汇编工具如MASM,简化了开发流程。 #### 二、内联汇编的优点与应用场景 内联汇编的主要优点在于其无缝集成能力与性能优化潜力。它不仅能够轻松整合到现有...

    历届自考C++__程序设计试题及答案

    这些知识点涵盖了C++程序设计的基本概念,包括语言兼容性、内存管理、输入输出、函数调用、成员访问控制、构造与析构函数、内联函数、函数重载、静态成员等。在学习C++时,理解这些概念是至关重要的。

    c++自考试题及答案 08年10月 全国

    8. **内联函数**:内联函数通常用于小型、频繁调用的函数,以减少函数调用的开销。如果函数体较大或执行时间较长,编译器可能不会将其内联展开,因此选项A和D正确,B和C错误。 9. **函数重载**:函数重载要求函数的...

    C++面试题精髓

    内联成员函数的代码会直接内嵌在调用的地方,它们不是为继承设计的;静态成员函数是类级别的函数,它们没有this指针,且不属于任何对象,不支持动态绑定;友元函数虽然可以在类内部访问私有成员,但它们不是类的成员...

    GCC内联汇编入门[参照].pdf

    同时,GCC内联汇编也可以与其他编程语言结合使用,例如C++、Java等。 本篇 HOWTO文档详细介绍了GCC内联汇编的概念、语法和用法,并提供了实用的示例代码和解释。通过学习这篇文档,开发者可以快速掌握GCC内联汇编的...

    深入理解C++11完整版

    9. 列表初始化:C++11允许在使用初始化列表初始化类时,自动推导出类的构造函数,并且支持对内置类型进行列表初始化。 10. nullptr关键字:C++11提供了一个新的空指针常量nullptr,用于替代之前的NULL。nullptr是一...

    大学期末考试C++选择题总结

    15. **派生类构造函数的执行顺序**:首先按照基类继承顺序执行基类构造函数,然后执行内嵌对象构造函数,最后执行派生类的构造函数函数体。选项D给出了正确的顺序。 16. **构造函数调用顺序**:在给定的代码段中,...

    深度探索C++的总结

    访问类内非静态成员依赖于对象地址和偏移,即使内联函数也是如此。 7. **模板与类型推断**:模板是C++中实现泛型编程的关键,但模板值参数必须是编译期常量。编译器的类型推断规则在非模板函数和模板实例化中有所...

    c++面向对象实验报告.pdf

    内联函数是为了提高效率,通过在调用处展开函数体来避免函数调用的开销。 9. **拷贝构造函数**: - 实验中提到了选做任务,要求设计`People`类并实现拷贝构造函数。拷贝构造函数用于创建一个新对象作为已存在对象...

    c++面向对象复习题答案版要点.docx

    内联函数通过inline关键字定义,用于减少函数调用的开销,特别适合小而频繁调用的函数。 拷贝构造函数在创建新对象时用于复制已有对象的属性,系统默认的拷贝构造函数会逐个复制数据成员。new运算符用于动态分配...

    c++面向对象复习题答案版 (2).pdf

    2. 内联函数:为了优化性能,小而频繁调用的函数可以定义为内联函数,通过在函数声明前加上inline关键字,请求编译器进行内联展开。 3. 面向对象特性:抽象、封装、继承和多态是面向对象编程的关键。抽象通过接口...

    c++面向对象复习题答案版.pdf

    内联函数用于优化性能,通过inline关键字告诉编译器尝试展开函数,减少函数调用的开销。 拷贝构造函数是C++中特殊的一种构造函数,当一个对象被用来初始化另一个对象时调用,系统默认的拷贝构造函数会逐个复制数据...

Global site tag (gtag.js) - Google Analytics