1、执行算术运算时,低类型(短字节)可以转换为高类型(长字节);例如:int型转换成double型,char型转换成int型等等;
2、赋值表达式中,等号右边表达式的值的类型自动隐式地转换为左边变量的类型,并赋值给它;
3、函数调用时,将实参的值传递给形参,系统首先会自动隐式地把实参的值的类型转换为形参的类型,然后再赋值给形参;
4、函数有返回值时,系统首先会自动隐式地将返回表达式的值的类型转换为函数的返回类型,然后再赋值给调用函数返回。
扩展资料C++中强制类型转换函数有4个:
1、const_cast(用于去除const属性)。
2、static_cast(用于基本类型的强制转换)。
3、dynamic_cast(用于多态类型之间的类型转换)。
4、reinterpreter_cast(用于不同类型之间的指针之间的转换,最常用的就是不同类型之间函数指针的转换)。
隐式类型转换发生在赋值表达式和有返回值的函数调用表达式中。
在赋值表达式中,如果赋值符左右两侧的操作数类型不同,则将赋值符右边操作数强制转换为赋值符左侧的类型数值后,赋值给赋值符左侧的变量。
在函数调用时,如果return后面表达式的类型与函数返回值类型不同,则在返回值时将return后面表达式的数值强制转换为函数返回值类型后,再将值返回。
参考资料百度百科-强制类型转换
1.转型有两种:
向上转型和向下转型(强制转型)
2.
两种分别如下:
1.
一种是向上转型
1.
对于基础数据类型
,
可以自动转型
,比如:
int
a
=
10
long
b
=
a
这里就是把int型转成了long型
,
因为
long范围比int大
,
这样的转型不会有任何影响
,
所以可以自动转型
2.
又比如
A
a
=
new
B()
其中
A
是B
的父类
,
这也是多态
,
就是父类的对象指向子类的引用
,
你调用a对象
,
实际上是B的类
,
但是B继承A
,
拥有A的一切属性和方法
(不谈复写)
3.
第二种是向下转型
,
也就是强制
这种需要强转
,
比如
long
a
=
10
int
b
=
(int)
a
通过
(int)可以强制转型
,
但是这样会丢失精度
,
比如a如果超过了b的范围
,
那么强转成int型,
只会等于int的最大值
又比如
:
B
b
=
new
A()
这样是不行的
,
需要有中间途径
,
比如
A
a
=
new
A()
Object
obj
=
a
B
b
=
(A)
a
而这种强转
,
又有要求
,
必须是同类型
,
也就是说
A
就是B
,
不然会报错.
4.
不同类型之间如果要转型
,
需要通过中间途径
,
比如JSON
,
将A转成JSON串
,
然后再转换为B
原因有如下:
Object数组中可以存储int ,string, class等类型,对于计算机来说它不清楚用户最终存储的是什么类型的数据,例如可以存储:
mm[0] = new String("123")
mm[1] = new MyClass()
如果存储以上数据类型,那么你强制转换就是失败的,Object数组存储未知类型,所以无法强制转换某一固定类型的数据,强制转换就会异常。
针对Object数组中某一个具体数据进行强制转换时,可以根据存储的实际类型进行转换处理,能够正常进行,所以是正确的。
以上的说明希望你能明白。