邏輯運算符 &&(邏輯與)和 ||(邏輯或)在評估時,若第一個運算元已能決定最終結果,則不再評估第二個運算元。這稱為「短路」。
| 運算符 | 第一個運算元 | 動作 | 結果 |
|---|---|---|---|
&& | false (0) | 短路,不算第二個 | false |
&& | true (非 0) | 必須算第二個 | 視第二個而定 |
|| | true (非 0) | 短路,不算第二個 | true |
|| | false (0) | 必須算第二個 | 視第二個而定 |
if (ptr != NULL && ptr->len > 0) 避免空指針解引用。func()、i++)時,短路會導致副作用不發生。int a = 0, b = 0;
if (a != 0 && (b = 10) > 0) { } // 短路,b 保持 0
if (a == 0 || (b = 20) > 0) { } // 不短路,b 變 20
&、| 為位運算符,用於邏輯判斷時不短路,兩側必全算。慎用於邏輯判斷,除非確需要副作用全執行。