C 삼항 연산자는 값이 반환 될 수있는 경우 표현식 b 및 c가 제공하는 값을 결정하기 위해 단일 표현식 a (조건) 만 평가하므로 단락 할 수 없습니다 .
다음 코드 :
int ret = a ? b : c;
다음 코드와 거의 동일합니다.
int ret;
if(a) {ret = b} else {ret = c}
표현식 a 는 && 또는 ||와 같은 다른 연산자로 구성 될 수 있습니다. 값을 반환하기 전에 두 개의 표현식을 평가할 수 있기 때문에 단락 될 수 있지만 단락을 수행하는 삼항 연산자로 간주되지 않고 일반 if 문에서와 같이 조건에서 사용되는 연산자로 간주됩니다.
최신 정보:
삼항 연산자가 단락 연산자라는 논쟁이 있습니다. 인수는 모든 피연산자를 평가하지 않는 모든 연산자가 아래 주석의 @aruisdante에 따라 단락을 수행한다고 말합니다. 이 정의가 주어지면 삼항 연산자가 단락되고 이것이 원래 정의 인 경우 동의합니다. 문제는 "단락 (short-circuit)"이라는 용어가 원래 이러한 동작을 허용하는 특정 종류의 연산자에 사용되었으며 논리 / 부울 연산자이며 그 이유 만 설명하려고한다는 것입니다.
문서 다음 단락 평가 , 단락 평가는 첫 번째 피연산자가 첫 번째 피연산자 인 && 연산자, 이것이 두 번째 무관 할 것으로 알고있는 방식으로 언어로 구현 부울 연산자 칭한다 거짓 , 그리고 || 연산자는 첫 번째 피연산자 true 이며 C11 사양 은 6.5.13 논리 AND 연산자 및 6.5.14 논리 OR 연산자에서도이를 기록합니다.
즉, 단락 동작을 식별하려면 첫 번째 피연산자가 두 번째 피연산자와 관련이없는 경우 부울 연산자처럼 모든 피연산자를 평가해야하는 연산자에서이를 식별해야합니다. 이는 단락이 논리 연산자에서 발생하기 때문에 MathWorks 의 "논리적 단락"섹션에서 단락에 대한 다른 정의에 기록 된 내용과 일치 합니다.
내가 삼항 연산자라고도하는 C 삼항 연산자를 설명하려고했지만 피연산자 중 두 개만 평가하고 첫 번째 피연산자를 평가 한 다음 두 번째 피연산자를 평가합니다. 첫 번째. 항상 이렇게합니다. 어떤 상황에서도이 세 가지를 모두 평가해서는 안되므로 어떤 경우에도 "단락"이 없습니다.
항상 그렇듯이, 무언가가 옳지 않다는 것을 알게된다면, 단지 반대표가 아니라 이에 반대하는 의견을 적어주세요. 이것은 단지 SO 경험을 더 악화시킬뿐입니다. 그리고 저는 우리가 단지 대답 만하는 훨씬 더 나은 커뮤니티가 될 수 있다고 믿습니다. 하나는 동의하지 않습니다.