C++(三)内联函数

简介: 本文介绍了C++中的内联函数概念及其与宏函数的区别。通过对比宏函数和普通函数,展示了内联函数在提高程序执行效率方面的优势。同时,详细解释了如何在C++中声明内联函数以及其适用场景,并给出了示例代码。内联函数能够减少函数调用开销,但在使用时需谨慎评估其对代码体积的影响。

C 语言中有宏函数的概念。宏函数的特点是内嵌到调用代码中去,避免了函数调用
的开销。

但是由于宏函数的处理发生在预处理阶段,缺失了语法检测和有可能带来的语
意差错。

宏函数 普通函数
优点 内嵌代码,避免压栈和出栈的开销 高度抽象,避免重复开发,类型检查
缺点 代码替换,易使生成代码体积变大,易产生逻辑错误,无类型检查。 压栈与出栈,带来开销
#include <iostream>
#include <string.h>
using namespace std;
#define SQR(x) ((x)*(x))
int sqr(int x)
{
    return x*x;
}
int main()
{
    int i=0;
    while(i<5)
    {
        printf("%d\n",SQR(i++));
        printf("%d\n",sqr(i++));
    }
    return 0;
}

内联函数

内联函数(inline function)是C++中的一种编程技巧,用于提高程序的执行效率。内联函数的基本思想是将函数调用替换为函数体,从而减少函数调用的开销。内联函数通常用于函数体较小且频繁调用的函数。

在C++中,可以通过在函数定义前加上inline关键字来声明一个内联函数。例如:

#include <iostream>

// 声明内联函数
inline int add(int a, int b) {
    return a + b;
}

int main() {
    int result = add(3, 4);  // 这里编译器可能会将add函数的调用替换为函数体
    std::cout << "Result: " << result << std::endl;
    return 0;
}
需要注意的是,inline关键字只是向编译器建议将该函数作为内联函数处理,但编译器可以选择忽略这个建议。编译器会根据函数的复杂度和调用频率等因素来决定是否将函数内联。

内联函数的优点:

减少函数调用的开销,提高程序执行效率。
适用于函数体较小且频繁调用的函数。
内联函数的缺点:

如果内联函数体较大,可能会导致生成的代码膨胀,反而降低效率。
内联函数不能递归调用。
总之,内联函数是一种优化手段,但在使用时需要权衡其优缺点,并根据具体情况进行选择。
相关文章
|
4月前
|
存储 安全 编译器
【C++专栏】C++入门 | 函数重载、引用、内联函数
【C++专栏】C++入门 | 函数重载、引用、内联函数
46 0
|
4月前
|
安全 编译器 Linux
【C++练级之路】【Lv.1】C++,启动!(命名空间,缺省参数,函数重载,引用,内联函数,auto,范围for,nullptr)
【C++练级之路】【Lv.1】C++,启动!(命名空间,缺省参数,函数重载,引用,内联函数,auto,范围for,nullptr)
|
1月前
|
安全 编译器 C++
C++入门 | 函数重载、引用、内联函数
C++入门 | 函数重载、引用、内联函数
25 5
|
2月前
|
存储 安全 编译器
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
|
3月前
|
存储 编译器 C语言
【C++入门】—— C++入门 (下)_内联函数
【C++入门】—— C++入门 (下)_内联函数
24 2
|
3月前
|
C语言 C++ 编译器
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
|
2月前
|
算法 编译器 C++
C++基础知识(三:哑元和内联函数和函数重载)
在C++编程中,"哑元"这个术语虽然不常用,但可以理解为在函数定义或调用中使用的没有实际功能、仅作为占位符的参数。这种做法多见于模板编程或者为了匹配函数签名等场景。例如,在实现某些通用算法时,可能需要一个特定数量的参数来满足编译器要求,即使在特定情况下某些参数并不参与计算,这些参数就可以被视为哑元。
|
3月前
|
存储 安全 编译器
C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字
C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字
32 2
|
4月前
|
编译器 C++
C++中的内联函数与const限定词的使用
C++中的内联函数与const限定词的使用
29 1
|
3月前
|
存储 安全 编译器
【C++】:函数重载,引用,内联函数,auto关键字,基于范围的for循环,nullptr关键字
【C++】:函数重载,引用,内联函数,auto关键字,基于范围的for循环,nullptr关键字
26 0