📜  C++和Linux中的短路

📅  最后修改于: 2021-05-30 11:52:10             🧑  作者: Mango

短路是编译器的优化步骤之一,在此步骤中,避免对表达式求值时不必要的计算。从左到右评估表达式。在某些情况下,仅通过评估表达式的某些部分就可以确定表达式的值,则该方法适用。

C++中的短路
在C++中,在评估’&&’(AND)和’||’(OR)逻辑运算符时会发生短路。在评估’&&’运算符,如果’&&’的左侧为false,则无论’&&’右侧的值如何,表达式始终会产生false,因此请检查’&&’的右侧’ 没有意义。因此,在这种情况下,编译器避免了对右侧的评估。类似地,在逻辑OR的情况下,“ ||”如果左侧的操作符为“ true”,则表达式的结果将始终为true,而与右侧的值无关。

使用AND(&&)和OR(||)逻辑运算符进行短路。

C++
#include 
using namespace std;
  
int main()
{
    // Short circuiting
    // logical "||"(OR)
    int a = 1, b = 1, c = 1;
  
    // a and b are equal
    if (a == b || c++) {
        cout << "Value of 'c' will"
             << "  not increment due"
             << " to short-circuit"
             << endl;
    }
    else {
        cout << "Value of 'c' "
             << " is incremented as there"
             << " is no short-circuit"
             << endl;
    }
  
    // Short circuiting
    // logical "&&"(OR)
  
    if (a == b && c++) {
        cout << "Value of 'c' will"
             << " increment as there"
             << " is no short circuit"
             << endl;
    }
    else {
        cout << "Value of 'c' will"
             << " not increment due to short circuit"
             << endl;
    }
}


输出:
Value of 'c' will  not increment due to short-circuit
Value of 'c' will increment as there is no short circuit

Linux中的短路

在Linux中,在评估’&&’和’||’时会发生短路像C++一样的运算符。

逻辑AND(&&)短路:

如果[[“ $ 1” -gt 5]] && [[“ $ 1” -lt 10]];然后
回声“将不会打印此输出”
别的
回声“将输出此输出”
“实际上是由于短路”
科幻

如果[[“ $ 1” -lt 5]] && [[“ $ 1” -lt 10]];然后
回声“将输出此输出”
“因为不会短路”
别的
回声“将输出此输出”
“实际上是由于短路”
科幻

输出:

逻辑OR(||)短路:

如果[[“ $ 1” -lt 5]] || [[“ $ 1” -gt 10]];然后
回声“将输出此输出”
“实际上是由于短路”
别的
回声“将输出此输出”
“因为不会短路”
科幻

如果[[“ $ 1” -gt 5]] || [[“ $ 1” -lt 10]];然后
回声“将输出此输出”
“因为不会短路”
别的
回声“将输出此输出”
“实际上是由于短路”
科幻

输出:

例如,要检查文件的存在,可以使用以下两种方法之一:

  • if  [[ -e "$filename" ]]; then
        echo "exists"
    fi
    
  • [[ -e "$filename" ]] && echo "exists"
    

在这种情况下,bash首先执行&&(and)左侧的表达式。如果该表达式的返回值非零(即失败),则无需评估&&的右侧,因为已知总体退出状态为非零,因为双方都必须返回成功逻辑并返回成功的指示器。

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”