C, C ++, C #, Java 및 기타 여러 언어에서 사용되는 “단락”이라는 용어를 들었습니다. 이것이 무엇을 의미하며 어떤 시나리오에서 사용됩니까?
답변
C의 단락은 논리 연산자가 모든 인수를 평가하지 않는 경우입니다.
예를 들어 가지고 &&
, 그 꽤 명백 0 && WhoCares
상관없이 거짓없는 것입니다 WhoCares
이다. 이 때문에 C는 평가를 건너 뜁니다 WhoCares
. 동일 1 || WhoCares
하지만 항상 사실입니다. 이 때문에 우리는 다음과 같은 코드를 작성할 수 있습니다
CanFireMissiles && FireMissiles()
이렇게하면 잠재적으로 불가능한 작업을 피할 수 있습니다. 미사일을 발사 할 수 없다면 확실히 시도하고 싶지 않습니다. 이것은 포인터, 특히 파일 포인터와 함께 일반적으로 사용됩니다.
bool isN(int* ptr, int n){
return ptr && *ptr == n;
}
이것은 불필요한 컴퓨팅을 피하는 다른 많은 유용한 방법으로 나타납니다.
isFileReady() || getFileReady()
필요하지 않은 경우 추가 작업을하지 않아도됩니다.
답변
“단락”은 일반적으로 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.
*/
}