강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

마이클피클님의 프로필 이미지
마이클피클

작성한 질문수

홍정모의 따라하며 배우는 C++

3.4 sizeof, 쉼표 연산자, 조건부 연산자

Conditinal Operator 질문 있습니다.

작성

·

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

마이클피클님의 프로필 이미지
마이클피클

작성한 질문수

질문하기