猿问

类型转换的问题?

short t =1;  t = t +1;  // 编译报错 需要显示转换

short t =1;  t +=1; //正确

请问这两个有什么区别


ibeautiful
浏览 576回答 2
2回答

桃花长相依

根据C#语言规范4.0第7.17.2节:7.17.2 复合赋值x op= y 形式的运算是这样来处理的:应用重载决策(第 7.2.4 节),就好比运算的书写形式为 x op y。然后,如果选定的运算符的返回类型可“隐式”转换为 x 的类型,则运算按 x = x op y 计算,但 x 只计算一次否则,如果选定运算符是预定义的运算符,选定运算符的返回类型可“显式”转换为 x 的类型,并且 y 可“隐式”转换为 x 的类型或者该运算符是移位运算符,则运算按 x = (T)(x op y) 计算(其中 T 是 x 的类型),但 x 只计算一次。否则,复合赋值无效,且发生绑定时错误。t += 1符合第2条。而t = t + 1会编译报错是因为:t + 1运算是一个byte加上一个int,因此它的结果是一个int,将一个大小未知的int值直接赋给一个byte类型的变量是不允许的。

慕沐林林

(t+1).GetType() 这个是int类型的,所以要显示转换这么说吧;+ 是左结合,就是从右向左结合,遇到1为int类型,所以t+1结果转换为int类型了  +=是右结合,即从左向右,遇t是short类型,之后的1则转换为short类型,结果为short类型
随时随地看视频慕课网APP
我要回答