作者:蓝色
链接:https://www.zhihu.com/question/29809743/answer/45701907
来源:知乎
首先inline是实现修饰符,而非声明修饰符,所以应该用于实现部分的修饰(你也可以放置inline在声明,但是没有必要),我相信C++ Primer应该解释的很清楚了。
那么为什么不能screen.h声明函数move,screen.cpp实现move呢?因为inline的代码是直接展开插入到被调用的地方,而非如普通函数的调用一样,需要发生栈操作。即会先去执行被调用函数,再转回来继续执行主调函数。那么,这个时候,你要么在main.cpp也如同x.cpp一样再次inline实现一次这个函数,要么你就干脆只在x.h的class body里面实现了,当然如果你和我一样有“代码洁癖”的话,可以像我一样先在class里面声明,再在class body外面实现:LLVMPascalCompiler/scanner.h at master · FrozenGene/LLVMPascalCompiler · GitHub
其实我觉得inline现在蛮鸡肋的了,编译器已经进化到今天这个地步了,我认为完全可以交给编译器自己去决定是否inline(因为即使你给了inline,也只是给编译器提醒可以inline,最后inline与否还是需要编译器自己来决定),或许某一天inline将会和register关键字一样退出舞台吧。