작성
·
167
2
안녕하세요 교수님. 항상 유익한 강의 감사합니다.
다름이 아니라
Conditional Operator의 결합성이 Right-to-Left 이던데
20분:55초 쯤에 나오는 예제를 보면
cout << ((t % 2 == 0) ? "even" : "odd") << endl;
저기서 어떻게 Right-to-Left가 가능한건지 잘 모르겠습니다.
저의 생각으론 (t%2==0)의 Condition을 먼저 검사한 다음
Condition이 true면 "even"을 false면 "odd"를 출력하는 것이라고 생각하는데
그러면 결합성이 Left-to-Right가 되어야 하지 않나요??
어째서 Right-to-Left인 건가요?
답변 2
6
아.. 몇 번을 읽어보고 읽어보고 해서 겨우 이해 했습니다.
a? b: c? d: e 이러한 경우,
(a?b:(c?d:e) 이런 식으로 결합이 되어 진다는게 Right-to-Left 의미 였군요..
아직 갈 길이 멀지만 열심히 해보겠습니다.
답변 감사합니다!
0
강의에서는 precedence 얘기만 한 것 같은데 associativity 질문을 하셨네요. 저도 궁금해져서 검색을 해봤습니다. 아래 부분이 원하시는 내용에 대한 설명입니다.
Operators that have the same precedence are bound to their arguments in the direction of their associativity. For example, the expression a = b = c is parsed as a = (b = c), and not as (a = b) = c because of right-to-left associativity of assignment, but a + b - c is parsed (a + b) - c and not a + (b - c) because of left-to-right associativity of addition and subtraction.
https://en.cppreference.com/w/cpp/language/operator_precedence#cite_note-2