Geekband Week a 一些相关概念的整理
成员函数:
1.成员函数能够直接访问成员数据,为了防止成员函数破坏数据,(如必要)应在常量成员函数定义或声明时在函数体前使用const声明。
例:int get_year() const {...};
2.如果一个类的某个成员函数是私有的,那么它只能被这个类的其他成员函数调用
3.成员函数的定义,需应用 class_name::function_name()的方式,'::'称为域解析操作符。
内联函数
1.内联函数目的是为了提高函数的执行效率,用关键字 inline 放在函数定义(注意是定义而非声明)的前面即可将函数指定为内联函数,内联函数通常就是将它在程序中的每个调用点上“内联地”展开,假设将 max 定义为内联函数:
inline int max(int a, int b)
{
return a > b ? a : b;
}
则调用: cout<<max(a, b)<<endl;
在编译时展开为: cout<<(a > b ? a : b)<<endl;
2.内联函数与宏:
宏的缺点:编译预处理时,将宏拷贝到代码内部。在替换过程中容易出现优先级、语句识别(悬空的else)等问题,而且不可调试。
内联函数:编译器在对内联函数进行展开前会进行安全检查和自动类型转换。而且具备了宏的优点。
3.应将内联函数放进头文件:关键字 inline 必须与函数定义体放在一起才能使函数成为内联,仅将 inline 放在函数声明前面不起任何作用。编译器在调用点内联展开函数的代码时,必须能够找到 inline 函数的定义才能将调用函数替换为函数代码,而对于在头文件中仅有函数声明是不够的。
4.内联函数的弊端:
内联函数以“代码膨胀”为代价,节省了函数调用的开销,但是未节省执行函数体需要的开销。
所以有两种形式不适用内联函数(编译器有权选择是否编译为内联函数):
1、函数过长,使总代码量增大;
2、函数内存在循环或复杂结构,使执行函数开销大于调用函数。