日期:2014-05-17  浏览次数:21235 次

x = x++ 的理解?。

如题

同样是 x=x++

在C++下的结果与C#下是不同的

如x = 1

C#下 x = x++ 后 x  仍然是1

C++下 x = x++ 后 x  是2
    class Program
    {
        static void Main(string[] args)
        {
            
    int x = 0;
    for(int i=0; i<5; i++) {
    
x =x++;
    }
Console.WriteLine(x);
Console.Read();
        }
    }
我好奇的是,“x=x++” 应该是x++先取x的值再计算+1,但是为什么赋值之后x并没有自增1.
c#

------解决方案--------------------
引用
在C++下的结果与C#下是不同的


不会有人承诺在不同语言下,同一个语句的结果是相同的。

就好像说同一个词汇在不同的语言下会有不同的意义。别指望世界大同,那不现实。
------解决方案--------------------
这个应该取决于运算符的优先级。
你试试 x=(x++);
------解决方案--------------------
C#,你这里是给x本身赋值,所以它并不会增加,如果你是int x = 1; int y = x++; 那么就符合你期望的结果了。 
------解决方案--------------------
很明显,x=x++,每次都是先用后加,但是均覆盖,并没有保存前一次的结果。你可以换成x=++x;//先加后附来得到5这个你想要的结果。
------解决方案--------------------
i++的结果是1,但是i的值是2,你用
i=i++;

那i就还是1。
如果不赋值直接用
i++;

那i就是2了
------解决方案--------------------
突然想起来一个
int i = 1;
            int j = i + i++;
            Console.WriteLine(j);
            Console.Read();

这个结果是2,而不是3。
------解决方案--------------------
不一样就不一样拜 也只有经常被打的面试官 才出这种问题
------解决方案--------------------
在每个开发语言中即使相同的语句,但是结果不一定相同的,再说了LZ为何要纠结于此?
------解决方案--------------------
x++返回x的当前值并使变量x自增1,这个自增的操作在返回x的值之前已经完成了
也就是说,如果x为1,那么这个表达式运算结果为1,并且在表达式运算完成时x为2
x=x++;这个语句按照优先级先计算x++,表达式结果为1,运算完成时x等于2,之后执行赋值x=1,故最后运算结果为x为1而不是2

另外,在C++中这是未定义行为,具体结果取决于编译器,不一定会是2的,请LZ注意
------解决方案--------------------
你循环一下,然后监视X的值 就懂了