编译器警告(等级 4)C4714

函数“function”标记为 __forceinline 未内联

已选择给定函数进行内联扩展,但编译器未执行内联。

虽然与 __inline 相比,__forceinline 向编译器发出更强力的指示,但仍然由编译器自行决定是否执行内联,并且未使用试探法来确定内联此函数的优点。

在某些情况下,编译器出于机械原因不会内联特定函数。 例如,编译器不会内联:

  • 会导致混合 SEH 和 C++ EH 的函数。

  • 当 -GX/EHs/EHa 处于开启状态时,按值传递复制构造对象的某些函数。

  • 当 -GX/EHs/EHa 处于开启状态时,按值返回不可展开对象的函数。

  • 在没有 -Og/Ox/O1/O2 的情况下编译时使用内联程序集的函数。

  • 具有变量参数列表的函数。

  • 具有 try(C++ 异常处理)语句的函数。

以下示例生成 C4714:

// C4714.cpp
// compile with: /Ob1 /GX /W4
__forceinline void func1()
{
   try
   {
   }
   catch (...)
   {
   }
}

void func2()
{
   func1();   // C4714
}

int main()
{
}