0%

    今天在调试过程中,遇到了一段类似下面这样一段代码,

1
2
3
BOOL bRes = TransUpdateToGDB(...);                  
bRes = bRes && TransUpdateToGDB(...);
bRes = bRes && TransUpdateToGDB(...);

    在调试过程中出现了一个奇怪的现象,第一行是正常进入到TransUpdateToGDB方法内部的,而第二第三行却直接跳过了,并没有进入到方法内。

    产生此现象的原因,是一个之前没有注意过的知识点:逻辑运算符的运算规则。

1、c++中逻辑运算符的优先级顺序

  • ! > && > ||(即优先级从高到低:非 > 与 > 或

  • 括号优先级最高,可以强制改变默认顺序。

    注意:&&和||并不是像加减和乘除这样同级别的,&& > ||

2、运算规则

    运算具有 短路逻辑

  • a && b:如果 afalseb 不会执行;

  • a || b:如果 atrueb 不会执行。

因此,我的代码当第一行结果返回false之后,后面就都会不执行了

版本:QT6.8

1、场景

        在做一个批处理数据工具时,采用QT做为界面框架,在实际作业生成过程中发现一个问题:在处理的数据量较大时,窗口会出现未响应,从而导致进度条状态无法更新。

阅读全文 »