解决方案 »

  1.   

    你见过C++的后缀自增运算符的重载代码吗?某种程度上temp是确实存在的。
      

  2.   

    这个问题不注意还真不大容易弄明白。
    这其实是一个运算符的优先级问题。temp的这个数值肯定存在,但不是你说的那样temp = j;
    =号的优先级低于++,就是说要先计算++后才会进行=号的计算。
    “=”计算符原理是  将右边的表达式的值赋值给左边的表达式。左边的表达式是j,而右边的表达式是j++;
    程序先计算右边表达式的值:
    最开始,j的初始值为 j = 0;因为++运算符置于变量的后面,说明这个++运算符的计算在整个表达式结果计算出来后。
    所以此时程序不会去执行++计算,而是去先计算整个表达式的值,因为整个表达式就j一个变量,所以整个表达式的值就是j的值,此时j的值为0;及整个右边的表达式的值为0;
    此时程序已经计算出整个右边的表达式的值了,此时程序会将这个值存储起来,即用一个temp记录此时右边表达式的值0,temp=0;因为j已经参加完表达式的计算,然后进行++的操作,即j自增。此时j = j +1; 即j = 1;
    然后由于运算符优先级的问题,此时才会计算=号运算符,即将右边表达式的值(temp=0)赋值给左边表达式,即此时运行
    j = temp; 而temp = 0;所以此时j = 0;
    即最终j的值为0