programing

조건부 연산자 권리가 연관성이 있는 이유는 무엇입니까?

golfzon 2023. 6. 23. 23:54
반응형

조건부 연산자 권리가 연관성이 있는 이유는 무엇입니까?

나는 왜 그 과제 연산자가 올바른 연상인지 이해할 수 있습니다.그것은 말이 됩니다.

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

반응형