今天本来在休息,结果小伙伴问了我个问题,把我的三观都颠覆了。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; }