C、C++、C#、Java、およびその他の多くで「短絡」という用語が使用されていることを聞いたことがあります。これは何を意味し、どのようなシナリオで使用されますか?
Cでの短絡は、論理演算子がそのすべての引数を評価しない場合です。
例として&&
、それはかなり明白です0 && WhoCares
は、WhoCares
が何であってもfalseになります。このため、CはWhoCares
の評価をスキップします。同じことが1 || WhoCares
、それは常に本当です。このため、次のようなコードを書くことができます
CanFireMissiles && FireMissiles()
これにより、潜在的に不可能な操作を回避できます。私たちがミサイルを発射できないならば、我々は確かに試みたくありません。これは、ポインター、特にファイルポインターで一般的に使用されます。
bool isN(int* ptr, int n){
return ptr && *ptr == n;
}
これは、不必要なコンピューティングを回避するために、他の多くの便利な方法で機能します
isFileReady() || getFileReady()
これにより、必要がない場合に余分な作業を行う必要がなくなります。
「Short Circuiting」は通常、「 Short Circuit Evaluation 」を指します。これは、C固有のものではなく、一般的な概念です。
ブール演算子は左から右に評価されるため、他の用語を不要にする用語はすべて役に立ちます。したがって、後で他の条件を除外する条件をチェックして、全体を評価するのではなく、論理演算の部分的な評価を可能にすることができます。
例:
while((x && y) == 1) {
//This bit will not execute if x is 0 or y is 0 but y won't even be
//evaluated due to short circuit evaluation if x is 0.
}
より複雑な例:
if((a || b || c || d || e || f || g || h || i || j || k) == 1) {
/* If any of these are equal to 1 the whole expression is equal to 1,
* thus doesn't it make sense to short circuit evaluate this?
* Saves a bunch of time.
*/
}