+= 运算符 少了一次计算?
偶然看到MSDN关于 += 赋值运算符 的备注:
使用 += 赋值运算符的表达式,如
x += y
等效于
x = x + y
不同的是 x 只计算一次。 + 运算符的含义取决于 x 和 y 的类型(对于数值操作数,其含义为相加;对于字符串操作数,其含义为串联,等等)。
不能直接重载 += 运算符,但用户定义的类型可重载 + 运算符(请参见 operator)。
+= 运算符还用于指定响应事件时要调用的方法;这类方法称为事件处理程序。 在此上下文中使用 += 运算符称为“订阅事件”。 有关更多信息,请参见 如何:订阅和取消订阅事件(C# 编程指南)。 和委托(C# 编程指南)。
以上来源:MSDN
但上面说明使用 += 运算符时,x只计算一次…
新建一Demo:
static void Demo() { int x, y; x = 1; y = 2; x = x + y; Console.WriteLine(x); x = 1; y = 2; x += y; Console.WriteLine(x); }
反编译IL代码:
.method private hidebysig static void Demo () cil managed { // Method begins at RVA 0x28a4 // Code size 32 (0x20) .maxstack 2 .locals init ( [0] int32 x, [1] int32 y ) IL_0000: nop IL_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: nop IL_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: nop IL_001f: ret } // end of method Program::Demo
//本文地址:http://www.cnblogs.com/Interkey/p/3590631.html
但其IL代码一样.
不仅是 += 运算符,-= 运算符………|= 运算符 都是x只计算一次。
那为何会只计算一次呢?纠结…
期待后续有个结果…[暂时未解]
推荐一个非常实用的文件及文件夹比较工具: Beyond Compare。
使用 Beyond Compare 可以很方便的对比出两个文件夹或者文件的不同之处。并把相差的每一个字节用颜色加以表示,查看方便。并且支持多种规则对比。对软件汉化者来说,这绝对是一款不可多得的工具。
作者:Cosmic_Spy
出处:http://www.cnblogs.com/Interkey/
有兴趣可以加群【.NET破解|反编译】请注明:博客园,谢谢~
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则肯定是你抄我的。
posted on 2014-03-09 21:10 Cosmic_Spy 阅读(358) 评论(0) 编辑 收藏 举报