今天在调试过程中,遇到了一段类似下面这样一段代码,
1 | BOOL bRes = TransUpdateToGDB(...); |
在调试过程中出现了一个奇怪的现象,第一行是正常进入到TransUpdateToGDB方法内部的,而第二第三行却直接跳过了,并没有进入到方法内。
产生此现象的原因,是一个之前没有注意过的知识点:逻辑运算符的运算规则。
1、c++中逻辑运算符的优先级顺序
!
>&&
>||
(即优先级从高到低:非 > 与 > 或)括号优先级最高,可以强制改变默认顺序。
注意:&&和||并不是像加减和乘除这样同级别的,
&&
>||
2、运算规则
运算具有 短路逻辑:
a && b
:如果a
为false
,b
不会执行;a || b
:如果a
为true
,b
不会执行。
因此,我的代码当第一行结果返回false之后,后面就都会不执行了