为了账号安全,请及时绑定邮箱和手机立即绑定

类型转换的问题?

类型转换的问题?

ibeautiful 2018-11-26 16:13:43
short t =1;  t = t +1;  // 编译报错 需要显示转换short t =1;  t +=1; //正确请问这两个有什么区别
查看完整描述

2 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

根据C#语言规范4.0第7.17.2节:

7.17.2 复合赋值

x op= y 形式的运算是这样来处理的:应用重载决策(第 7.2.4 节),就好比运算的书写形式为 x op y。然后,

  1. 如果选定的运算符的返回类型可“隐式”转换为 x 的类型,则运算按 x = x op y 计算,但 x 只计算一次

  2. 否则,如果选定运算符是预定义的运算符,选定运算符的返回类型可“显式”转换为 x 的类型,并且 y 可“隐式”转换为 x 的类型或者该运算符是移位运算符,则运算按 x = (T)(x op y) 计算(其中 T 是 x 的类型),但 x 只计算一次。

  3. 否则,复合赋值无效,且发生绑定时错误。

t += 1符合第2条。而t = t + 1会编译报错是因为:t + 1运算是一个byte加上一个int,因此它的结果是一个int,将一个大小未知的int值直接赋给一个byte类型的变量是不允许的。


查看完整回答
反对 回复 2018-11-30
?
慕沐林林

TA贡献2016条经验 获得超9个赞

(t+1).GetType() 这个是int类型的,所以要显示转换

这么说吧;+ 是左结合,就是从右向左结合,遇到1为int类型,所以t+1结果转换为int类型了

  +=是右结合,即从左向右,遇t是short类型,之后的1则转换为short类型,结果为short类型


查看完整回答
反对 回复 2018-11-30
  • 2 回答
  • 0 关注
  • 575 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信