inline!C++内联

在android5.0的源代码中


经常可以看到xxxxx-inl.h的文件(C++中好像还有专门的.inl文件)   这些文件都是内联函数/模板的文件  比如Class-inl.h  Class_linker-inl.h Dex_file-inl.h Art_method-inh.h(里面尽是一些

template<VerifyObjectFlags kVerifyFlags>
inline void ArtMethod::SetNativeMethod(const void* native_method) {}这样子的函数。。。。

我们发现第一个问题,申明内联函数/模板的文件都是.h结尾


什么是内联函数:(百度百科)

联函数是指用inline关键字修饰的函数。

内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。

编译时,类似宏替换,使用函数体替换调用处的函数名

一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理。


内联函数与宏定义的区别:

1.内联函数在运行时可调试,而宏定义不可以;
2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会; 
3.内联函数可以访问类的成员变量,宏定义则不能; 
4.在类中声明同时定义的成员函数,自动转化为内联函数。



Ps,编译器好像会自动选择一些函数进行内联的优化的O O 并非申明了就一定内联,也不是不申明就不内联O O

好像内联和宏 都是主要为了解决重复定义的问题??

猜你喜欢

转载自blog.csdn.net/zero9988/article/details/51426518