读书人

这两种写法有什么不同?该怎么处理

发布时间: 2013-07-01 12:33:04 作者: rapoo

这两种写法有什么不同?
short s1=1;

1. s1=s1+1;
2. s1+=1;

看别人说的第1种写法有错,第二种正确。
两者本质区别在哪里?
[解决办法]

,
恩,恩
[解决办法]
第一种如楼上所说从int到short需要类型转换,存在越界风险。报不报错可能是编译器类型和风险等级决定的
第二种是+=操作符,可能这个1在编译的时候可能会被当作short类型作为入参,或者在+=函数体里面替你做了安全的类型转换
第二种不存在变量拷贝,效率优于第一种
[解决办法]
原因是 微软规定的
http://msdn.microsoft.com/zh-cn/library/ybs77ex4.aspx
以下赋值语句将产生一个编译错误,原因是赋值运算符右侧的算术表达式在默认情况下的计算结果为 int 类型。

short z = x + y; // Error: no conversion from int to short

若要解决此问题,请使用强制转换:

short z = ( short )(x + y); // OK: explicit conversion

说说我的个人看法:

经常有看到会讨论编译时是怎么样,运行时是怎么样
C#是一种强类型语言,编译前会检查类型是否一致


第一种,就是就编译器(VS包括编译器)干的事情,判断是否类型一致

其实第二种也是可能出错的,只是在编译时,由于语法原因,所以编译过去了
但如果
short s = 32767;
s += 32767;//s的值是-2
从计数机角度不可以说错啦,但从人的预想来说~是错的~
[解决办法]


[解决办法]
引用:
不过我在vs2010中试了,两种都可以,都没出错,谁知道原理的,解释一下。
你可能把s1定义成int了,定义为short试试
[解决办法]
1. s1=s1+1; 有=和+两个运算符,报错的原因是因为=规定右侧表达式的值必须可以隐式转换为左侧
2. s1+=1; 只有+=这一个运算符,且只会对s1作一次运算
加1 一般更习惯写成自加形式,其它数写成第二种形式,性能上也更好
要防止溢出等运算错误,可以用checked关键字

本质区别还是在IL代码上

读书人网 >asp.net

热点推荐