首页 > 其他 > 详细

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

时间:2014-03-10 03:43:35      阅读:391      评论:0      收藏:0      [点我收藏+]

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

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

x += y

等效于

x = x + y

x is only evaluated once.‘ data-guid="98bf72bde501adf349eebe1780eb9458">不同的是 x 只计算一次。 + operator depends on the types of x and y (addition for numeric operands, concatenation for string operands, and so forth).‘ data-guid="27c91cba017547b854bef59f53545f95">+ 运算符的含义取决于 x 和 y 的类型(对于数值操作数,其含义为相加;对于字符串操作数,其含义为串联,等等)。

+= operator cannot be overloaded directly, but user-defined types can overload the + operator (see operator).‘ data-guid="fa1aa13c6668507439f9cf83d92f6ee2">不能直接重载 += 运算符,但用户定义的类型可重载 + 运算符(请参见 operator)。

+= operator is also used to specify a method that will be called in response to an event; such methods are called event handlers.‘ data-guid="b27fff97dbf790e2d3eed13f4c78c3b9">+= 运算符还用于指定响应事件时要调用的方法;这类方法称为事件处理程序。 += operator in this context is referred to as subscribing to an event.‘ data-guid="aa5b0d12e458cc1c82d910075c149359">在此上下文中使用 += 运算符称为“订阅事件”。 How to: Subscribe to and Unsubscribe from Events (C# Programming Guide).‘ data-guid="bc280fd8f64175c1257a71c3269e4091">有关更多信息,请参见 如何:订阅和取消订阅事件(C# 编程指南)。 Delegates (C# Programming Guide).‘ data-guid="2a2fc84475a07c304cd83927e9a72c77">和委托(C# 编程指南)

以上来源:MSDN


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

新建一Demo:

bubuko.com,布布扣
    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);
    }
bubuko.com,布布扣

反编译IL代码:

bubuko.com,布布扣
.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
bubuko.com,布布扣

但其IL代码一样.

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

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

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


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

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

+= 运算符 少了一次计算?,布布扣,bubuko.com

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

原文:http://www.cnblogs.com/Interkey/p/3590631.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!