• 《C++ Primer》笔记-inline内联函数


    inline 函数避免函数调用的开销

    // find longer of two strings
         const string &shorterString(const string &s1, const string &s2)
         {
    
             return s1.size() < s2.size() ? s1 : s2;
         }
    

    将 shorterString 写成函数有一个潜在的缺点:调用函数比求解等价 表达式要慢得多。在大多数的机器上,调用函数都要做很多工作;调用前要先保 存寄存器,并在返回时恢复;复制实参;程序还必须转向一个新位置执行。 

    将函数指定为 inline 函数,(通常)就是将它在程序中每个调用点上“内联地”

    展开。假设我们将 shorterString 定义为内联函数,则调用: cout << shorterString(s1, s2) << endl;

    在编译时将展开为:

             cout << (s1.size() < s2.size() ? s1 : s2)
                  << endl;
    

    从而消除了把 shorterString 写成函数的额外执行开销。 

    // inline version: find longer of two strings
         inline const string &
         shorterString(const string &s1, const string &s2)
         {
    
    return s1.size() < s2.size() ? s1 : s2;
    

    }

    一般来说,内联机制适用于优化小的、只有几行的而且经常被调用的函数。 大多数的编译器都不支持递归函数的内联。一个 1200 行的函数也不太可能在调 用点内联展开。

    inline 函数放入头文件

    内联函数应该在头文件中定义,这一点不同于其他函数。

    inline 说明对于编译器来说只是一个建议,编译器可以选择忽 略这个。 

    把 inline 函数的定义放在头文件中,可以确保在调用函数时所使用的定义是相同 的,并且保证在调用点该函数的定义对编译器可见。

    在头文件中加入或修改 inline 函数时,使用了该头文件的所 有源文件都必须重新编译。 

  • 相关阅读:
    堆栈学习
    需要阅读的书籍
    Rust Book Lang Ch.19 Fully Qualified Syntax, Supertraits, Newtype Pattern, type aliases, never type, dynamic sized type
    Rust Lang Book Ch.19 Placeholder type, Default generic type parameter, operator overloading
    Rust Lang Book Ch.19 Unsafe
    Rust Lang Book Ch.18 Patterns and Matching
    Rust Lang Book Ch.17 OOP
    Rust Lang Book Ch.16 Concurrency
    Rust Lang Book Ch.15 Smart Pointers
    HDU3966-Aragorn's Story-树链剖分-点权
  • 原文地址:https://www.cnblogs.com/worldtraveler/p/3205567.html
Copyright © 2020-2023  润新知