首先&&和||的运算规则是:
||是OR门的运算,即同假为假false,其余为真true。
&&是AND门的运算,即同真为真true,其余为假false。
短路运算指的是:
如果在进行前面的表达式的运算过程,通过判断已经明确的知道整个表达式的结果,那么就不会进行后面表达式的运算判断。(与非遵循从左到右的顺序)
eg:表达式1 || 表达式2 || 表达式3...…|| 表达式n,如果表达式1的运算结果为true,则整个表达式的结果已经得出为true,因此不会再对后面的表达式2、表达式3到表达式n进行运算判断。只有当表达式1的运算结果为false,则根据表达式2的运算结果继续判断。即在遇到true时就能原地得出整个表达式的结果是true,不用继续后面的判断。
表达式1 && 表达式2 && 表达式3...…&& 表达式n,如果表达式1的运算结果为false,则整个表达式的结果已经得出为false,因此不会再对后面的表达式2、表达式3到表达式n进行运算判断。只有当表达式1的运算结果为true,则根据表达式2的运算结果继续判断。即在遇到false时就能原地得出整个表达式的结果是false,不用继续后面的判断。
int a = 1, b = 1;
--a&& --b;
cout << a << " " << b;
如图,此时得到a跟b的值是0跟1。因为a自减之后与运算的结果已经为false,不用进行后面的自减。