类inline成员函数,我一直的写法竟然是错的,悲剧
今天想了一个函数,应该是用inline的,看MFC里的一个函数差不多,就看了一下MFC实际它的代码,果然不出我所料,是inline的。但令我没想到的 是,inline关键字写在了函数实现那里
比如
class aaa
{
int get();
}
inline int aaa::get()
{}
而我,一直是
class aaa
{
inline int get();
}
int aaa::get()
{}
赶紧搬出来effective C++看了一下,就是上面那样。这……令我如何是好,那我那种写法,含意是什么?
[解决办法]
实际上你放声明哪里,对于现代化的编译器,也可能内联,你什么都不加,仍然可能内联
因为内联本身就是个建议而已,决定权在编译器,在现代化编译器拥有足以自行判断是否应该内联的情况下,这个关键字,其实已经没什么用了,你可以在编译器中禁止inline之外的函数内联,提供一种细化控制,但大部分时候都没什么用(除非嵌入式中内存过于紧张,需要防止编译器擅自内联造成额外内存开销)
C++ Primer对内联函数的另一个说法——内联函数必须写在头文件,让调用者都能看见。该说法对于许多编译器也是不适用的,编译器既然能通过声明找到实现,那么函数放CPP里,其他的CPP调用的时候一样能找到实现