比如:
inline void FuncA(_T para)
{
FuncB(para, para+1);
}
void FuncB(_T paraA, _T paraB)
{
//Something
}
我試了下是可以通過編譯的,函數運行也正常。
我想知道在編譯時,FuncA調用的地方直接使用一句“ FuncB(para, para+1); ”進行替換,
還是說整個FuncB也會被展開塞進代碼裡?或者說對於這種情況編譯器不會生成內聯函數?
至於 整個FuncB也會被展開塞進代碼裡?
這是函數FuncB 會不會內聯的問題,和函數FuncA 沒有任何關系
可以內聯的話 FuncB 被內聯進 FuncA
編譯器對內聯成功的代碼,自然不會還原成函數調用了
FuncB不可以內聯,那麼 FuncA 就被內聯成對FuncB函數調用
FuncB可以內聯 那麼內聯 FuncA 就被已經內聯到FunA的內部FuncB內內聯後的代碼取代了,
也就是 FuncB,FuncA 都內聯了
注意到FuncB 沒有inline
所以不是一定會內聯的,所以就看編譯器心情了(設定了),
即便很容易內聯,因為沒有指定,所以就不確定了