前言
if里的条件判断,都是先判断左边,再根据情况判断右边!
对于&&,只有①为真,才继续判断②,否则就不会判断②
对于| | ,只有①为假,才继续判断②,否则就不会判断②
例1:
void test()
{
int a = 0;
if (++a && --a)
{
cout << 99 << endl;
}
cout << a;
}
输出:
0
因为先计算左边的++a,此时a先加1,从而左边为真,再计算右边的--a,此时a先减1,
变成0,为假,因此if条件为假,最后输出a=0
例2:
void test()
{
int a = 0;
if (a++ && --a)
{
cout << 99 << endl;
}
cout << a;
}
输出:
1
因为先计算左边的a++,先用a的初始值0判断,判断完了才进行a加1,因此左边为假,
从而不再判定右边,因此不会再执行--a操作,所以最后输出a=1
例3:
void test()
{
int a = 0;
if (a++ || --a)
{
cout << 99 << endl;
}
cout << a;
}
输出:
0
因为先计算左边的a++,先用a的初始值0判断,判断完了才进行a加1,因此左边为假,
这时才计算右边的--a,此时a先减1,变成0,为假,因此if条件为假,最后输出a=0
例4:
void test()
{
int a = 0;
if (a++ || a--)
{
cout << 99 << endl;
}
cout << a;
}
输出:
99
0
因为先计算左边的a++,先用a的初始值0判断,判断完了才进行a加1,因此左边为假,
这时才计算右边的a--,此时a的初始值为1,判断为真,判断完了才进行a减1,因此if条件为真,
输出99,最后输出a=0