inline函数的总结

    xiaoxiao2022-07-05  185

    思维导图

    1.使用方法

    1.在函数返回类型前加Inline。成员函数可以在声明时候添加Inline也可以在定义时候添加inline。2.将成员函数定义在类定义式内,这个成员函数就被隐喻为Inline。3.头文件中如果想定义inline函数,必须包含定义。

    内联说明对于编译器仅仅是一个建议,编译器可以忽略这个建议 下面没有加lnline的时候,机器进行编译操作

    一般的函数调用,进行压栈操作,导致系统开销加大,花费了更多时间。 下面是加了inline的编程代码: 用inline修饰的函数,在编译时会在调用的内联函数地方展开,没有压栈开销。以空间为代价,提高了效率。

    2.内联函数存放的位置:

    放在头文件,并且声明和定义最好不要分离,不然可能出现链接错误。因为在编译过程中进行Inlineing。为了将“函数调用”替换为“被调用函数的主体”,编译器必须要直到函数长什么样的,仅仅是声明是不够的。把内联函数定义在头文件,可以确保在调用函数的时候使用的定义是相同的。 可以放在源文件中,但多个源文件的同名inline函数实现必须相同。

    3.内联函数的优点:

    可以避免调用函数的开销。当函数比较小的时候,内联函数可以令目标代码更加高效。对于存取函数以及比较短的执行函数。

    4.内联函数的缺点:

    1.由于内联函数将对函数的每个调用都以函数本身代替。所以会增加代码的大小。造成代码膨胀,不利于在内存不大的机器上运行。2.很多编译器无法调试内联函数3.inline无法随着程序的升级而升级。

    5.不适用情况:

    1.大多数编译器不支持递归函数的内联2.包含循环或switch语句的内联时得不偿失的,除非在大多数情况下这些循环或switch语句不执行。3.虚函数 所有对虚函数的调用都会使inline落空。因为虚函数意味着:等待,直到运行期才确定调用哪个函数。而调用内联函数意味着:执行前,先将调用动作替换为被执行函数的本体。由于编译器不知道调用哪个函数,导致虚函数无法使用Inline进行内联操作。 4.构造函数和析构函数 编译器会为析构函数和构造函数插入许多代码。
    最新回复(0)