+=运算符少了一次计算?

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

偶然看到MSDN关于 += 赋值运算符 的备注:

使用 += 赋值运算符的表达式,如

x += y

等效于

x = x + y

不同的是 x 只计算一次。 + 运算符的含义取决于 x 和 y 的类型(对于数值操作数,其含义为相加;对于字符串操作数,其含义为串联,等等)。

不能直接重载 += 运算符,但用户定义的类型可重载 + 运算符(请参见 Operator)。

+= 运算符还用于指定响应事件时要调用的方法;这类方法称为事件处理程序。 在此上下文中使用 += 运算符称为“订阅事件”。 有关更多信息,请参见 如何:订阅和取消订阅事件(C# 编程指南)。 和委托(C# 编程指南)。

以上来源:MSDN

但上面说明使用 += 运算符时,x只计算一次…

新建一Demo:

staticvoidDemo()

{intx, y;x= 1;

y = 2;

x = x +y;Console.WriteLine(x);x= 1;

y = 2;

x +=y;

Console.WriteLine(x);}

反编译IL代码:

.methodPRivatehidebysigstaticvoidDemo () cil managed

{//Method begins at RVA 0x28a4//Code size 32 (0x20).maxstack2.locals init (

[0] int32 x,

[1] int32 y

)

IL_0000: nopIL_0001: ldc.i4.1

IL_0002: stloc.0

IL_0003: ldc.i4.2

IL_0004: stloc.1

IL_0005: ldloc.0

IL_0006: ldloc.1

IL_0007: add

IL_0008: stloc.0

IL_0009: ldloc.0

IL_000a: call void[mscorlib]System.Console::WriteLine(int32)

IL_000f: nopIL_0010: ldc.i4.1

IL_0011: stloc.0

IL_0012: ldc.i4.2

IL_0013: stloc.1

IL_0014: ldloc.0

IL_0015: ldloc.1

IL_0016: add

IL_0017: stloc.0

IL_0018: ldloc.0

IL_0019: call void[mscorlib]System.Console::WriteLine(int32)

IL_001e: nopIL_001f: ret

}//end of method Program::Demo

//本文地址:http://www.cnblogs.com/Interkey/p/3590631.html

但其IL代码一样.

不仅是 += 运算符,-= 运算符………|= 运算符 都是x只计算一次。

那为何会只计算一次呢?纠结…

期待后续有个结果…[暂时未解]

推荐一个非常实用的文件及文件夹比较工具: Beyond Compare。

使用 Beyond Compare 可以很方便的对比出两个文件夹或者文件的不同之处。并把相差的每一个字节用颜色加以表示,查看方便。并且支持多种规则对比。对软件汉化者来说,这绝对是一款不可多得的工具。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航