C++ 函数名重载
函数名重载:给多个不同的函数(参数的类型或个数有所不同)取相同的名字
注:如果两个函数的参数类型和个数都相同,知识他们的返回值类型不同,不能对其进行函数名重载,因为函数调用时不能区分调用的是哪个函数。
(和函数名重载没有太大关系:函数名可转换成函数函数指针)
重载函数的绑定
1. 精确匹配
萝卜放进萝卜筐,白菜放进白菜筐
2. 提升匹配
精确匹配不到就进行提升匹配
1)按整型提升规则
2)把float提升到double,把double提升到long double
3. 标准转换匹配
提升匹配不到就进行标准转换匹配
标准转换规则:
1)任何算术类型可以互相转换
2)枚举类型可以转换成任何算术类型
3)零可以转换成任何算术类型或指针类型
4)任何类型的指针可以转换成void *
5)派生类指针可以转换成基类指针
6)每个标准转换都是平等的(也就是1到5的优先级相同)
4. 自定义转换匹配
1)强制类型转换
2)增加额外的重载
对于含有两个或两个以上参数的重载函数绑定问题,原则是先绑定最佳匹配(也就是参数对应个数越多)
C++ 标准库
abs; //绝对值
acos; //反余弦
acosf; //反余弦
acosl; //反余弦
asin; //反正弦
asinf; //反正弦
asinl; //反正弦
atan; //反正切
atan2; //y/x的反正切
atan2f; //y/x的反正切
atan2l; //y/x的反正切
atanf; //反正切
atanl; //反正切
ceil; //上取整
ceilf; //上取整
ceill; //上取整
cos; //余弦
cosf; //余弦
cosh; //双曲余弦
coshf; //双曲余弦
coshl; //双曲余弦
cosl; //余弦
exp; //指数值
expf; //指数值
expl; //指数值
fabs; //绝对值
fabsf; //绝对值
fabsl; //绝对值
floor; //下取整
floorf; //下取整
floorl; //下取整
fmod; //求余
fmodf; //求余
fmodl; //求余
frexp; //返回value=x*2n中x的值,n存贮在eptr中
frexpf; //返回value=x*2n中x的值,n存贮在eptr中
frexpl; //返回value=x*2n中x的值,n存贮在eptr中
ldexp; //返回value*2exp的值
ldexpf; //返回value*2exp的值
ldexpl; //返回value*2exp的值
log; //对数
log10; //对数
log10f; //对数
log10l; //对数
logf; //对数
logl; //对数
modf; //将双精度数value分解成尾数和阶
modff; //将双精度数value分解成尾数和阶
modfl; //将双精度数value分解成尾数和阶
pow; //计算幂
powf; //计算幂
powl; //计算幂
sin; //正弦
sinf; //正弦
sinh; //双曲正弦
sinhf; //双曲正弦
sinhl; //双曲正弦
sinl; //正弦
sqrt; //开方
sqrtf; //开方
sqrtl; //开方
tan; //正切
tanf; //正切
tanh; //双曲正切
tanhf; //双曲正切
tanhl; //双曲正切
tanl; //正切
C++ 条件编译
使用编译预处理命令对编译过程进行知道,决定哪些代码需要编译。
1. 格式1
#ifdef <宏名> / #ifndef <宏名>
<程序段1>
#else
<程序段2>
#endif
2. 格式2
#ifdef <常量表达式1> / ifdef <宏名> / #ifndef <宏名>
<程序段1>
#elif <常量表达式2>
<程序段2>
#elif <常数表达式3>
<程序段3>
#else
<程序段4>
#endif