C++内联函数与C语言函数宏

2020-05-12  本文已影响0人  不惜留恋_

C++内联函数

什么是内联函数?

在函数的声明和定义前加一个 inline 关键字,这个函数就是内联函数。

通常会省略函数原型,即在声明的同时就定义。

内联函数原理是什么?

内联函数在编译期,在内联函数调用的地方执行了代码替换。

内联函数作用?

执行一个普通的函数的开销包括函数调用的开销以及函数执行的开销。

如果函数执行的开销远小于函数调用的开销,那么省略函数调用的开销将会提高程序的运行效率,这就是内联函数存在的意义。因此内联函数一般都是比较简短的调用。

但是,如果调用内联函数的地方比较多,那么编译器会在每个调用的地方生成一个内联函数的副本,这样内存就相应的增加了。

例子

#include <iostream>

// inline关键字定义了内联函数
inline double square(double x)
{
    return x * x;
}

int main()
{
    int  a = 2;
    double a = square(a++);  // 内联函数,编译期执行代码替换,结果为 3 * 3
    return 0;
}

C函数宏

C++的内联函数执行了编译期的代码替换,这个替换动作与C的函数宏有此类似,但不完全一样.

#include <iostream>
#include <stdio.h>

// C定义的函数宏
#define SQUARE(X) X*X

// C++定义的内联函数
inline double square(double x)
{
    return x * x;
}


int main()
{
    double a = 2;
    double b = SQUARE(a++); // C函数宏替换,结果为a++*a++
    printf("b = %f\n", b); // 6.000000

    double c = 2;
    double d = square(c++); // C++内联函数替换,结果为2*2,而不是c++*c++
    std::cout << "d = " << d << std::endl; // 4
    return 0;
}

同样是求一个数的平方,C的函数宏却得到了不一样的结果。

上一篇 下一篇

猜你喜欢

热点阅读