PoEdu学习笔记
重载(接上篇)
匹配
1\精准匹配 int->int
2\提升匹配(隐式转换) char->int float->double
当匹配规则冲突时,二义性,则需精准匹配或强制转换
根据相应业务来写,不要写太多,容易错的多
注:c++中不需要void*,因为可以运用重载等等
默认实参Defaltargu me
必须在函数参数列表中右到左的实现
定义函数时给参数赋值,当使用该函数可以不传该参数,且该参数为定义值
空指针
用nullptr而不是NULL
类型转换(由大到小)
例:int->unsigned int
注:C语言中的类型转换[(char)num ]很暴力暴力,不管怎样都会成功转换,不确定安全\不安全
隐式转换
int num=1.0003;
转换符(c++)
static_cast<类型>(表达式) 表示转换(不是强制转换,使用最多,常用于基类指针到派生类的转换)
const_cast<> 移除对象的常量性,主要用于(指针、引用)参数的匹配
reinterpret_cast<> 强制转换,是二进制上的操作,相当于拿一个指针来拷贝(memcpy)。一般无意义、危险,不要使用
dynamic_cast<> 用于多态,大型框架
代码膨胀(展开)
特点
生成效率高,调试变难
顺序
预处理include
define只是替换
inline
内联函数inline(不会新建堆栈,将代码展开)
使用
将函数前加上inline
运行效率大大提升,但会代码膨胀(生成编译效率慢)
即使加了inline也不一定就是内联函数,由编译器根据你栈的使用情况决定