c++异常会阻止函数内联

Would C++ exception stops function from being inlined?

本文关键字:函数 异常 c++      更新时间:2023-10-16

假设我有一个非常简单的函数,我希望编译器内联它。但是我可能需要在看到一些无效输入时抛出异常,这会阻止编译器内联函数吗?

编译器可以出于任何原因拒绝内联。GCC列出了不能内联函数的原因,但异常抛出不在其中。此外,选项-Winline将导致编译器发出警告,如果它不能内联一个你标记为内联的函数。你可以尝试一下,看看你是否做了什么来防止内联

编译器内联抛出错误的函数是完全合理和有效的

我刚刚在MSVC版本19中遇到了这种情况。在为x86编译时,抛出异常的函数不会被内联。如果我将throw替换为exit(1),或者如果我编译为x86-64,它可以很好地内联。