今天本來在休息,結果小伙伴問了我個問題,把我的三觀都顛覆了。get到了新的知識點,這里記錄一下。
內類的函數,都默認為是內聯函數!!
這居然是真的。然后我就懵了。因為內聯函數應該是定義在頭文件里比較好,如果定義在cpp文件中,其他的文件就無法找到內聯函數進行展開了。
那么問題來了:難道我定義一個類后,所有的類內函數都寫在頭文件里??平時我們不是這么干的啊?
如果內聯函數沒有寫在頭文件里,編譯器如何處理呢?
答:當做普通函數處理!忽略其內聯的屬性!所以,就算是類內的函數,沒有定義在頭文件里也沒有關系,只不過是取消了其內聯的屬性而已!
如下面的例子,可以正常運行:
頭文件:
#ifndef __INLINE_CLASS_H__ #define __INLINE_CLASS_H__ #include<stdio.h> inline void infun(int a, int b); #endif
cpp1 有內聯函數定義
#include"inline_class.h" inline void infun(int a, int b) { printf("%d %d\n", a, b); } void fun2(int x, int y) { infun(x+1, y-1); }
cpp2引用了內聯函數
#include"inline_class.h" void fun3(int x, int y) { infun(x*2, y/2); }
cpp3有主函數,引用了內聯函數
#include"inline_class.h" int main() { int a = 1; int b = 2; infun(a, b); return 0; }