zoukankan      html  css  js  c++  java
  • += 运算符 少了一次计算?

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

  • 相关阅读:
    深拷贝浅拷贝的探索以及实现
    Vue之动态class写法总结
    hh
    90%的新媒体人都在用的标题套路!
    研究999篇100W+爆款文,标题之总结
    想突破10w+?先过了这一关……
    易撰数据分析,做精准爆文分析!
    清除.bat
    截图.bat
    Git 学习笔记(二)分支管理
  • 原文地址:https://www.cnblogs.com/Interkey/p/3590631.html
Copyright © 2011-2022 走看看