5.2.8. 外部内联函数

ISO C++ 标准要求每次使用内联函数时都要对其进行定义。 为防止内联函数的多个外联副本之间发生冲突,C++ 编译器在公共节中发出外联 extern 函数。

外联的内联函数

在以下情况下,编译器以外联方式发出内联函数:

  • 获取函数的地址,例如:

    
    inline int g()
    
    {
    
        return 1;
    
    }
    
    int (*fp)() = &g;
    
    
  • 无法内联函数,例如,递归函数:

    
    inline int g()
    
    {
    
        return g();
    
    }
    
    
  • 编译器使用试探法判定最好不要内联该函数。 这种试探法受 -Ospace-Otime 的影响。 如果使用 -Otime,编译器将内联更多的函数。 通过使用 __forceinline 声明函数,可以忽略这种试探法。 例如:

    
    __forceinline int g()
    
    {
    
        return 1;
    
    }
    
    

    有关详细信息,另请参阅--forceinline

Copyright © 2007 ARM Limited. All rights reserved. ARM DUI 0348AC
Non-Confidential