运算时:相当于:k1=(k++);
k2=(k++);
k3=(++k);val=k1+k2+k3;显然:k1=2,k=3k2=3,k=4k3=5,k=5

解决方案 »

  1.   

    同意楼上的观点。(++k)先运算,然后到第一个(k++),第一个(k++)完了后,k = 4 。
      

  2.   

    我反汇编看过了
    vc是2+2+3
    vc.net是 3+3+3
    c#是 2+3+5是编译器的问题但我觉得这种算法不统一吗考试的时候 有这种题目你怎么添难道都算对?
      

  3.   

    我解释一下
    (k++)+(k++)+(++k);
    vc是从左到右执行 附值结束后再做k++
    vc.net是 先全部做++k 附值结束后再做k++ (c的机制是这样的,,所以我支持这种)
    c#是从左到右执行 取过值后就做k++这题目没正确答案,大家也不用争 :)
      

  4.   

    To: pop82 (pop82) 
    好问题!我明天帮你问问VC,C#微软的人。 看看是不是bug。
    也请你通过微软的反馈中心反映这个问题。谢谢!
      

  5.   

    呵呵,楼上的说得有道理。
    对于这个问题,从C语言的知识说,是C#正确的。++k和k++,所有的语言的实现方式都一样的。而且这个表达式用了()标记,强制了运算顺序,所以不会有问题的。
      

  6.   

    I got answered from C# team member: 
    C# does have explicit rules around this behavior. (left to right)
    C++ does not (problem of the C++ language, not the compiler)