因为自增、自减运算符都是后置式,所以用a,b的原值参与运算,运算结束后在进行自增或者自减。
所以,先是计算a<=0的值,如果为False,则根据“短路求值”策略,后面的!(b--<=0)被短路,不进行计算,同时a值增加1,此时输出的a为原来的a+1,b值不变,k值为0;如果a<=0为True,则再计算b<=0值,取反,然后是逻辑与运算,同时a值增加1,b值减少1。
若有定义int a = 1, b = 1 , k;输出结果a = 2
b = 1
k = 0
若有定义int a = 0, b = 1, k;输出结果为a = 1
b = 0
k = 1
测试代码如下
#include <iostream>
using namespace std;
int main ()
{
int a = 1, b = 1, k;
//
int a = 0, b = 1, k;
k = ( a++ <= 0 )&& !( b-- <= 0 );
cout << a << ends << b << ends << k << endl;
getchar ();
return 0;
}