关于自增(减)操作的发生时机
第一个例子
#include <iostream>
using namespace std;
int main()
{
int i,j;
i=j=3;
cout << i++ << "," << i << endl;
cout << i << endl;
cout << ++j << "," << j << endl;
cout << j << endl;
return 0;
}
第二个例子
#include <iostream>
using namespace std;
int main()
{
int n1,n2;
n1=n2=3;
n2=n1++,n2++,++n1;
cout << "n1=" << n1 << endl;
cout << "n2=" << n2 << endl;
return 0;
}
第三个例子
#include <iostream>
using namespace std;
int main()
{
int x=4,y=25,z=2;
z=(--y/++x)*z--;
cout << "x=" << x << endl;
cout << "y=" << y << endl;
cout << "z=" << z << endl;
return 0;
}
前加(减)是在表达式(或语句)执行之前运行,
后加(减)是在表达式(或语句)执行后完成的.
语句或','分割的表达式都会使后加(减)起作用了.
前加(减)++i优先级高于*/,顺序从右至左,先结合后运算.
后加(减)优先级低于*/及=,顺序从左至右,先运算后结合.
同一表达式中不影响自身.上面结果是:
3,3
4
4,3
4
n1 = 5, n2 = 4, x = 5, y = 24, z = 7
语句z=(--y/++x)*z--;分析为:
z = (((--y)/(++x))*z)--
z = (24/5)*2 - 1
整除 24/5 = 4 再 * 2 = 8 , 结果减 1 = 7.
后减(--)优先级低,运算最后完成.
其实还有一点需要注意的是,编译器的执行顺序.在gcc中是总右往左执行