inline内联函数
inline内联函数关键字在定义函数时在最前面加上inline,但并不是加上inline就是内联函数,inline时建议性关键字,编译器会自己判断该函数是否可以变成内联函数,内联函数适合短小精悍的函数-代码少,语法简单,无while for switch 等复杂逻辑语句。递归函数,虚函数一定不是内联函数。
好处:在函数调用时,inline函数在编译时可以将函数的调用以函数体替换(类似宏)来消除函数调用的时间开销inline是c++提供的高效方法
注意: 1.内联函数是一个空间换时间的做法,内联函数随可以提高效率但不是所有的函数都要用 内联 函数,有些函数的时间开销远小于其函数体代码的执行时间那么效率提高的并不 明 显,如果函数被大量调用时,要大量复制函数体代码,会有更多的内存被占用得不偿 失。
2.类——结构在类中既声明又定义的函数一般默认为内联函数,在类中只声明,在类外定 义的函数一般不默认为内联函数,除非加inline。
Operator:重载操作符
注意:重载操作符是对原本操作符的补充和扩展
以函数的形式——函数名为:在operator后加要重载的操作符eg:operator+就是要重载+号;一般有返回值类型为了和后续的操作符继续操作;参数的数量要和操作符匹配,类型顺序要和使用场景匹配一致。eg:int operator+(int a,int b){a * b};
扩展:
在使用operator重载++时为了区分++num和num++:
num++会多一个整形参数,这个参数毫无意义只是为了区分
int operator++(num,int){
return num++;
}
左++:
int operator++(num){
return ++num;
}
同一个重载操作符函数在类内和类外的区别:
1——类内的重载操作符函数的参数列表会默认有一个this指针,所以传参会比类外少一个
2——类内的重载操作符函数的参数列表的顺序相对来说固定,类外的可调,类内类外冲突问题
注意事项:
1.重载操作符不能给默认值,否则会改变其使用规则
2.重载操作符函数的参数数量是根据操作符的使用规则定的
3.不能用重载操作符: ?: :: sizeof
4.= [] -> ()只能在类内重载
5.在类外重载的操作符至少有一个要是自定义类型(class,struct)
6.不能改变其优先级,结合性,不能创造新的操作符。
额外: