短路评估语言缺陷?

Jos*_*osh -5 c++

以下是一些代码,用于检查值是否介于某个范围之间

 if((i <= n) && ( (i+m) >= n){
   //do something.....
 };
Run Code Online (Sandbox Code Playgroud)

这基本上是一个布尔AND条件,如果两个操作数都为真,那么条件的结果为真.但是,对于短路评估,C++只测试第一个条件是否为真,如果是,那么它永远不会检查第二个条件是否为真.在适当的数学意义上,这是一个布尔测试?这完全扰乱了我的代码的逻辑,而是我必须这样写:

 if( (i <= n){
    if((i+m) >= n){
       //do something......
    }
 }
Run Code Online (Sandbox Code Playgroud)

什么是短路评估的意义,以及如何在不使用嵌套if条件的情况下使C++进行适当的布尔测试.

Tar*_*ama 8

但是,对于短路评估,C++只测试第一个条件是否为真,如果是,那么它永远不会检查第二个条件是否为真.

情况就是如此||,但不是&&.&&如果第一个条件是短路false.你的两个片段是等价的.