一、什么是隐式转换?
隐式转换是编译器完成的,帮助程序继续完成任务的一个手段。
二、怎么使用隐式转换?编译器自动完成转换,需要特别注意转换的效果是否符合预期。
三、什么时候发生隐式转换- 条件语句中,非bool转换成bool
if(998)
->if(true)
- 初始化语句中,初始值转换成变量类型
int pi=3.14
->int pi=3
- 赋值语句中,右侧对象转换成左侧对象,
double pi;pi=3
->double pi=3.000000000000000
- 关系、算术运算符类型不一样,都转换成同一类型。
int + double + double
->double+double+double
- 函数调用时,实参转换成形参类型。
- 构造函数仅有一个参数且没有被声明为
explicit
的函数,出现参数不匹配时进行的一步转换
对象的类型定义了对象所能包含的数据和参与的运算,一种运算能够被大多数对象支持靠的就是转换,将操作数两边的转成同一类型再进行运算。如:
double+int->double+double
一个重要规则就是:运算符对象将会转换成两者中最宽的类型。
4.2 初始化隐式转换初始化时,初始值向声明的变量类型转换。
4.3 其他类型隐式转换- 数组转为指针。
- 指针的转换。整数0(NULL)或nullptr转换成任意指针;非常量指针转换成void *’;任意指针转换成const void *,继承关系基类和派生类转换;指针转换成bool(条件语句)
- 转换成常量。
int i;const int &j=i
,“虽然你不是常量,但是我可以把你看成是常量”。