持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天点击查看活动详情
使用inLine的原因
引入它的主要原因是用它替代C中表达式形式的宏定义。 表达式形式的宏定义如: #define ExpressionName(Var1,Var2) ((Var1)+(Var2))*((Var1)-(Var2)) 宏定义的优点: 没有了参数压栈,代码生成等一系列的操作。因此,效率很高 也就是它不需要进行一些参数操作 只需要进行简单的符号替换 但是这样的宏定义 它存在隐患 预处理器符号表中的简单替换,因此它不能进行参数有效性的检测,也就不能享受C++编译器严格类型检查的好处,另外它的返回值也不能被强制转换为可转换的合适的类型 使用inLine就能避免这些缺点
类的内联函数是一个真正的函数 类的内敛函数(inline)可以作为某个类的成员函数,当然就可以在其中使用所在类的保护成员及私有成员。
内敛函数和一般函数的区别
1.内联函数是直接复制“镶嵌”到主函数中去的,就是将内联函数的代码直接放在内联函数的位置上,主函数在调用一般函数的时候,是指令跳转到被调用函数的入口地址,执行完被调用函数后,指令再跳转回主函数上继续执行后面的代码
2.内联函数是程序中调用几次内联函数,内联函数的代码就会复制几份放在对应的位置上 一般函数只有一份 要用的时候就跳转到代码的位置去
3.内联函数一般在头文件中定义,而一般函数在头文件中声明,在cpp中定义
使用方法
在函数声明或定义中,函数返回类型前加上关键字inline,即可以把函数指定为内联函数 如果在类中直接定义,不需要用inline修饰,编译器自动化为内联函数 class ClassName{ ..... .... INT GetWidth(){return m_lPicWidth;}; }
在类外定义时添加inline关键字 inline double Account::GetBalance() { return balance; } inline double Account::Deposit( double Amount ) { return ( balance += Amount ); } inline double Account::Withdraw( double Amount ) { return ( balance -= Amount ); }
注意
inline说明对编译器来说只是一种建议,编译器可以选择忽略这个建议。比如,你将一个长达1000多行的函数指定为inline,编译器就会忽略这个inline,将这个函数还原成普通函数。 2.在调用内联函数时,要保证内联函数的定义让编译器"看"到,也就是说内联函数的定义要在头文件中 所以就可能造成头文件过于繁杂 我们可以用#include"SomeInlie.cpp" 将内敛函数写在cpp文件中 再在头文件中包含cpp文件就行了