`

【C++ Primer】内联函数和外联函数

 
阅读更多

一,概念

成员函数:在类的定义中规定在类体中说明的函数作为类的成员,称为成员函数。

前面讲过一般的成员函数,它是根据某种类的功能的需要来定义的。又讲述了一些特殊的成员函数:构造函数、析构函数、拷贝初始化构造函数等。还有一些成员函数后面还会介绍。 成员函数除了说明和定义在类中之外,还有些什么特性,这是本节讨论的问题。

二、内联性和外联函数

类的成员函数可以分为内联函数和外联函数。

1)内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内

2)外联函数是声明在类体内,定义在类体外的成员函数。外联函数的函数体在类的实现部分。

内联函数在调用时不是像一般的函数那样要转去执行被调用函数的函数体,执行完成后再转回调用函数中,执行其后语句,而是在调用函数处用内联函数体的代码来替换,这样将会节省调用开销,提高运行速度。

内联函数与带参数的宏定义的代码效率是一样的,但是内联函数要优于宏定义,因为内联函数遵循函数的类型和作用域规则,它与一般函数更相近,在一些编译器中,一旦关上内联扩展,将与一般函数一样进行调用,调试比较方便。

外联函数变成内联函数的方法很简单,只要在函数头前面加上关键字inline就可以了。



输出结果: d()return:8

说明:类A中,直接定义了3个内联函数,又使用inline定义了2个内联函数。内联函数一定要在调用之前进行定义,并且内联函数无法递归调用。区别就在于,运行时侯的效率与定义的方法不同。

引用网络精辟结论:

内联函数的代码编译后会直接放在调用点的函数体内, 从而使得代码增大, 但是效率提高了(减少了跳转, 参数传递以及保存调用函数寄存器状态的过程).

对外联函数的调用会在调用点生成一个调用指令(在X86中是call), 函数本身不会被放在调用者的函数体内, 所以代码减小, 但效率较低.

所以一般只有当函数体较小的情况下才声明为内联函数


分享到:
评论

相关推荐

    C++Primer Plus附录源码等文件.zip

    9. 模板:模板是C++的泛型编程工具,允许编写能处理多种数据类型的函数和类。通过练习,读者将学习如何定义和使用函数模板、类模板,以及模板元编程。 通过解读书中附录的源代码,读者可以直观地看到C++编程的实践...

    c++ primer有目录pdf第五版本5th

    - **内联函数和常量成员函数**:优化代码执行,减少函数调用开销。 - **静态成员和静态成员函数**:理解类的静态属性和行为。 - **动态内存管理**:使用new和delete操作符进行动态内存分配和释放。 《C++ Primer...

    C++Primer 习题解答(第4版)--绝对完整版

    同时,还会涉及构造函数、析构函数、拷贝构造函数和赋值运算符重载。 3. **模板与泛型编程**:C++ Primer 习题解答详尽解释了模板的概念,包括函数模板和类模板,以及模板特化和模板元编程。泛型编程让代码具有更好...

    c++ primer plus 答案 c++ primer plus 答案

    了解类的构造函数和析构函数,以及成员函数和友元函数的概念。 5. **模板**:模板是C++的泛型编程工具,允许我们编写可以处理多种数据类型的代码。这包括函数模板和类模板。 6. **标准库**:C++标准库提供了大量的...

    C++ Primer(Fifth Edition)(英文版+中文版)

    此外,C++ Primer还涵盖了泛型编程和模板,包括函数模板、类模板以及模板特化。模板是C++中实现代码重用的强大工具,可以创建通用的算法和数据结构。 标准库是C++编程不可或缺的一部分,书中详细讲解了iostream库...

    C++ primer中文版-高清-带目录

    5. **模板**:阐述模板在函数和类中的应用,包括函数模板、类模板以及模板元编程。 6. **异常处理**:介绍C++的错误处理机制,如何使用try、catch和throw进行异常处理。 7. **输入/输出流**:讲解iostream库,包括...

    C++ Primer(第5版)_带书签_高清完整版

    多态性则允许不同类型的对象对同一消息作出响应,这在C++中主要通过虚函数和抽象类实现。 5. **模板**:C++的泛型编程主要依赖于模板,它可以用于创建类型无关的函数和类。函数模板可以生成处理不同类型参数的函数...

    C++Primer习题集第五版 pdf

    习题集 【中图法分类号】TP312-44 【内容提要】 C++Primer(FifthEdition)由三位C++大师StanleyB.Lippman、JoséeLajoie和BarbaraE.Moo合作完成,其中文译本《C++Primer中文版(第5版)》也已出版。与上一版相比,本书...

    c++ primer 第5版 英文版 原版精美排版 mobi格式 kindle直读

    C++的标准模板库是其强大功能的一部分,包括容器(如vector、list、set)、迭代器、算法和函数对象。书中会详细介绍如何利用STL进行高效编程。 6. **指针与引用** C++中的指针和引用是其独特之处,它们提供了对...

    C++ Primer编程习题集(第5版).pdf

    C++ Primer编程习题集(第5版),有习题和编程代码,供自我检验使用

    C++ Primer 5th 英文高清版 (带完整目录)

    此外,C++ Primer 5th还详细阐述了模板这一强大的工具,包括函数模板、类模板、模板特化和模板元编程。模板是C++中的泛型编程基础,能够实现代码的高效和灵活。 标准库是C++编程的重要组成部分,书中详细介绍了STL...

    C++primer中文第五版

    在C++ Primer的第五版中,作者们对C++11和C++14的新特性进行了详尽的讲解,包括自动类型推导、右值引用、lambda表达式、并发编程以及模板元编程等。这些新特性极大地增强了C++的现代性和效率,使得C++在保持高性能的...

    C++ Primer第四版【中文高清扫描版】.pdf

    《C++ Primer 第四版》是著名的...总而言之,《C++ Primer 第四版》是一本全面、权威的C++教程,其内容经过精心组织,配合丰富的实例和习题,能够引导读者深入理解C++语言,同时对于中高级程序员也具有很高的参考价值。

    C++primer第四版源代码

    6. **模板**:C++的模板是一种泛型编程工具,可以创建通用函数和容器,如vector、list、map等,以适应不同类型的数据。 7. **STL(Standard Template Library)**:C++标准库中的模板容器、算法和迭代器等组件,...

    c++primer中文版勘误表

    在这里,修订后的代码将默认构造函数和 v1 为空进行了正确的分离。 2. 第 89 页倒数第五行:“照常”改成“通常”。 知识点:这里的修订是为了使语言更加准确和通俗。在 C++ 中,“照常”和“通常”都可以用来描述...

    C++Primer课程详细视频讲解

    该视频是关于C++ Primer 这本书的猎豹详细视频初级高级讲解 该视频是关于C++ Primer 这本书的猎豹详细视频初级高级讲解 该视频是关于C++ Primer 这本书的猎豹详细视频初级高级讲解 该视频是关于C++ Primer 这本书的...

Global site tag (gtag.js) - Google Analytics