always_inline(IBM 扩展)

always_inline 函数属性指示编译器内联函数。 满足以下所有条件时,可以直接插入此函数:
  • 该函数是满足以下任何条件的内联函数:
    • 该函数与 inline__inline__ 关键字一起指定。
    • 指定了选项 -qinline+<function_name> ,其中 function_name 是要直接插入的函数的名称。
    • 仅限 C + + 开始该函数在类声明中定义。仅限 C++ 结束
  • 此函数未与 noinline__noinline__ 属性一起指定。
  • C 仅开始优化级别为 O2 或更高。仅限 C 结束
  • 要直接插入的函数数不超过编译器可支持的内联函数的限制。

always_inline 函数属性语法

读取语法图跳过可视语法图__attribute__(( always_inline__always_inline__ ))

noinline 属性优先于 always_inline 属性。 仅当启用了直接插入时, always_inline 属性才优先于直接插入编译器选项。 如果禁用直接插入,那么将忽略 always_inline 属性。

仅限 C + + 开始即使指定了 always_inline 属性,编译器也可能不会内联虚拟函数。 编译器将不会发出参考消息来指示未直接插入虚拟函数。

当您专门指定使用 always_inline 属性指定的函数模板时,此属性将传播到模板规范。 如果将 always_inline 属性应用于模板规范,那么将忽略重复的 always_inline 属性。 请参阅以下示例。
template<class T> inline __attribute__((always_inline)) T test( ){
    return (T)0;
}

// The duplicate attribute "always_inline" is ignored.
template<> inline __attribute__((always_inline)) float test<float>(){
    return (float)0;
}   
仅限 C++ 结束