【问题标题】:How to interprete multiple incrementation如何解释多重增量
【发布时间】:2014-01-09 04:35:34
【问题描述】:

我在一次采访中遇到了这个问题,我想知道如果你有同样的问题,你会给出什么答案。 不要在 IDE 中测试程序

public class MyClass
{
    private int _myInt;
    public int MyInt
    {
        get { return _myInt; }
        set { _myInt = value; }
    }

    public MyClass()
    {
        MyInt = 1;
    }
}

这个程序应该在屏幕上打印什么?更重要的是为什么

var myClass = new MyClass();

myClass.MyInt += myClass.MyInt;
myClass.MyInt = myClass.MyInt +++ 2;

Console.WriteLine(myClass.MyInt);

【问题讨论】:

  • a +++ b == a + (++b).
  • 我希望问这个面试问题的公司没有问它,因为它的代码库包含这样的代码......
  • 快讯,我们不是你的采访者。你可以把这段代码放进去并编译它,看看你自己会发生什么。尝试推理正在发生的事情。在调试器中运行它。任何。既然你已经结束了面试,那么这样做是没有意义的。
  • @JeffMercado 我很惊讶你不能回答这个问题!
  • 谁说他不能?他给了你很好的建议,让你在一般情况下得到答案。

标签: c# auto-increment increment


【解决方案1】:

让我们看看一切

  1. 当您执行var myClass = new MyClass(); 时,MyInt = 1,因为您已在构造函数中对其进行了初始化

  2. 当你这样做时,myClass.MyInt += myClass.MyInt; MyInt 是 1,所以你自己加了 1,所以现在 MyInt 是 2

  3. 当你这样做时myClass.MyInt = myClass.MyInt +++ 2;; MyInt 是 2,你加了 2,所以它变成了 4,后 ++ 暗示,赋值后递增(在这种情况下),所以它在 MyInt 中分配 4

因此答案应该是 4,

但这是一个非常简单的案例,这个答案几乎表明 post ++ 表示 evaluate current expression then increment 和 pre ++ 表示 increment then evaluate current expression,但并非完全如此(虽然它出现在您的案例中),请阅读更多关于here,由语言设计者本人

【讨论】:

    【解决方案2】:

    如果你把第三行写得有点不同,它会更清楚一点:

    myClass.MyInt = myClass.MyInt++ + 2;
    

    后递增返回 2,然后递增。结果是 2 和 2 被添加到它。然后后自增的结果又被加法的结果(2+2)覆盖

    【讨论】:

      【解决方案3】:

      Ans 为 4,因为 ++(post increment operator) 的 precedence+ 更高,+precedence= 更高

      【讨论】:

        猜你喜欢
        • 2017-07-06
        • 2012-04-09
        • 1970-01-01
        • 1970-01-01
        • 2013-07-26
        • 2016-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多