今天在网上博客上发现一个很好的优先级记忆方法,链接:http://blog.csdn.net/skywalker_leo/article/details/6237222
此贴用来积累关于优先级的计算:
(1)
int x = 7,y =3;
1 ? ++x,++y:--x,--y;
std::cout<<x<<y;
解:根据优先级,实际代码执行是这样的:(1? ++x , ++y : --x),--y。当我在XCode上测试时,编译器只是提醒了我--x永远不会执行,结果是83
(2)
int m = 2,n = 3,x = 4,y = 5,z = 6,w = 7;
if ((m = x > y)&&(n = z > w))
{
}
std::cout<<m<<n;
解:根据&&用法,当&&前面等式为否时,则if立即判断为假,不会执行&&后面语句,结果为03。附上反汇编代码,看看关于if(m=0)的实现原理:
即,cmp dword ptr [m] , 0
(3)
int x = 1 ,b = 0;
if (x++)
{
b = x +1;
}
std::cout<<x<<b;
解:结果为2,3。当初我一直以为,x++是在完成一个语句后值才会发生变化(也就是执行到达一个分号时)但是事实我们来看看反汇编代码:
反汇编告诉我们,m++处理方式是先存储m到临时变量,再对m立即累加,对if语句判断使用的是存储在临时变量中的m值(即累加前的值),后来带入n计算的是累加后的m值。