我知道内联函数要么被调用,要么被称为普通函数.
但是,我如何知道内联函数是否实际被替换在它被调用的地方,因为将内联函数作为内联处理的决定是在编译时?
Alo*_*ave 59
在运行时以编程方式,你不能.
事情的真相是:   你不需要知道        
编译器可以选择inline未标记的inline函数或忽略明确标记的函数inline,这完全是编译器的愿望(读智慧)并且您应该信任编译器明智地完成其工作.大多数主流编译器都能很好地完成它们的工作.     
如果您的问题纯粹来自学术观点,那么有几种选择:
您可以检查汇编代码以检查函数代码是否在调用时内联.
如何生成汇编代码?
对于gcc:编译时
使用-S开关.
例如:     
g++ -S FileName.cpp
生成的汇编代码创建为文件FileName.s.    
对于MSVC:从命令行
使用/ FA Switch.
在生成的汇编代码中查找是否存在call特定函数的汇编指令.
如果某些编译器未能遵守内联函数请求,则会发出警告.
例如,在gcc中,-Winline如果编译器没有内联声明为内联的函数,则命令选项将发出警告.
查看GCC文档以获取更多详细信息:
-Winline
如果无法内联声明为内联的函数,则发出警告.即使使用此选项,编译器也不会警告系统头中声明的内联函数失败.
编译器使用各种启发式方法来确定是否内联函数.例如,编译器会考虑内联函数的大小以及当前函数中已经完成的内联量.因此,源程序中看似微不足道的变化可能导致产生的警告
-Winline出现或消失.
如果您需要确保该函数是内联的并且可以在 MS VC++ 中使用专有扩展,请查看__forceinlinedeclarator。编译器将内联函数,或者如果它属于记录的特殊情况列表,您将收到警告 - 因此您将知道内联状态。
不以任何方式认可它。