조건부 연산자 권리가 연관성이 있는 이유는 무엇입니까?
나는 왜 그 과제 연산자가 올바른 연상인지 이해할 수 있습니다.그것은 말이 됩니다.
x = 4 + 3
x에 할당되기 전에 4와 3이 추가되는 것으로 평가됩니다.
어떻게 하는지 잘 모르겠습니다.?:올바른 연상을 하는 것이 도움이 될 것입니다.두 개가 있을 때만 중요합니까??:s는 이렇게 사용되었습니다.
z = (a == b ? a : b ? c : d);
그런 다음 다음 다음과 같이 평가됩니다.
z = (a == b ? a : (b ? c : d));
확실히 왼쪽에서 오른쪽으로 평가하는 것이 더 말이 됩니까?
왼쪽에서 오른쪽으로 평가하면 다음과 같습니다.
z = ((a == b ? a : b) ? c : d);
즉, 첫 번째 조건부의 결과를 사용합니다.a또는b)을 두 번째 조건부의 부울 조건으로 사용합니다.그것은 말이 되지 않습니다: 그것은 다음과 같습니다.
int z, tmp;
/* first conditional */
if(a == b) tmp = a;
else tmp = b;
/* second conditional */
if(tmp) z = c;
else z = d;
언젠가는 정확히 이것을 하고 싶을 것이지만, 각각의 사람들이?:이어지는 것은 더 많은 조건을 추가하는 것을 의미합니다, 예를 들어.if/else if/else if/else오른쪽 연관 결합이 산출하는 것은 다음과 같습니다.
int z;
/* first conditional */
if(a == b) z = a;
else /* second conditional */ if(b) z = c;
else z = d;
오른쪽 연관 3항 연산자가 있는 모든 언어에서 다음과 같이 if-elseif-else 표현식을 작성할 수 있습니다.
val = a == 0 ? 1:
a == 1 ? 2:
4;
반대로 왼쪽 연관 3항 연산자(예: PHP, thanks @user786653)가 있는 언어에서는 괄호를 사용하여 위의 의도를 명시적으로 시행해야 합니다.
<?php
// This will output 't', not 'true'.
echo (true ? 'true' : false ? 't' : 'f');
// the following is a more obvious version of the same code as above
echo ((true ? 'true' : false) ? 't' : 'f');
// here, you can see that the first expression is evaluated to 'true', which
// in turn evaluates to (bool)true, thus returning the true branch of the
// second ternary expression.
?>
당신은 연상의 개념을 잘못 알고 있습니다.
연산자일 때+좌파 연상이라고 하는데, 이것은 다음을 의미합니다.a + b + c와 동등합니다.(a + b) + c와는 반대로a + (b + c).
연산자=오른쪽 연관성이 있습니다. 즉,a = b = c와 동등합니다.a = (b = c)와는 반대로(a = b) = c.
연관성은 평가 순서와 무관합니다.
언급URL : https://stackoverflow.com/questions/7407273/why-is-the-conditional-operator-right-associative
'programing' 카테고리의 다른 글
| 스프링 부트 테스트에서 와이어모크 랜덤 포트로 속성 설정 (0) | 2023.06.23 |
|---|---|
| ASP.NET 사용자 지정 Validator 클라이언트 측 및 서버 측 유효성 검사가 시작되지 않음 (0) | 2023.06.23 |
| 활동에서 원래 추가된 창이 누출되었습니다. (0) | 2023.06.23 |
| MongoDB 노드 드라이버가 인스턴스 풀을 생성하는 동안 오류가 발생하는 이유는 무엇입니까? (0) | 2023.06.03 |
| CSS 클래스가 하나 이상의 다른 클래스를 상속할 수 있습니까? (0) | 2023.06.03 |