注册 登录
编程论坛 C++教室

【求助】【新手】关于优先级的问题

huangdi95 发布于 2010-03-12 23:51, 378 次点击
#include<iostream>
using namespace std;
int main()
{
    int i(1),j(1),k(3);
    --i&&j++&&k--;
    cout<<i<<'\t'<<j<<'\t'<<k<<endl;

    ++i||j--||--k;
    cout<<i<<'\t'<<j<<'\t'<<k<<endl;
    system("pause");
    return 0;
}

运行结果是:
0    1    3
1    1    3

不太明白,哪位大虾可以详细解释一下吗???
我是刚学C++的,望各位多多指教!!谢谢!!
4 回复
#2
debroa7232010-03-13 14:30
通常的编译器是从左向右运算的,所以
--i&&j++&&k--;
前运算了--i,这时的i为0
在碰到运算符&&时,由于i==0相当于假,而&&的一个特性就是碰到假就返回,所以它后面的运算并不会执行,这就是为什么结果只有i被操作而其它变量没有被操作的原因
++i||j--||--k;
操作符||正好相反,在碰到运算值为真的时候返回,这里,先运算了++i,i为1,是真,所以,反面的运算操作又跳过去了。
#3
pangding2010-03-13 15:51
一般来说 && || 都是用在 if 之类里用来判断的,很少这么用。
这么写,就是利用表达式的副作用,还有短路求值的特性。
#4
hahayezhe2010-03-13 20:16
不同的编译器 你会感觉不同的
#5
succubus2010-03-15 09:09
还是别研究这种东西的好^_^

[ 本帖最后由 succubus 于 2010-3-15 09:10 编辑 ]
1