이 표현에 무슨 일이 일어나고 있습니까? b = a + (a = a + 5)
a = 5
b = a + (a = a + 5)
결과 b = 15
그 후 첫 번째 'a'가 변경되지 않는 이유는 무엇입니까 (a = a + 5)? 그런데 왜 두 번째 것이 바뀌나요? 여기서 단계적으로 정확히 무슨 일이 일어나고 있습니까?
식은 그룹화에 관계없이 항상 왼쪽에서 오른쪽으로 평가됩니다. 따라서 다음과 같습니다.
a = 5;
int lhs = a; // 5
int rhs = (a = a + 5); // Increments a by 5 (i.e. a=10), and rhs=10
b = lhs + rhs; // 15
이 실행 된 후 그래서 a
것이다 10. 수 있지만 그 이후에만 일어나는 a
결과가 15보다 20 이유 메인 또한, 첫 번째 오퍼랜드에 대해 평가되었다.
평가 순서가 우선 순위와 같지 않은 부분을 이해하는 것이 정말 중요합니다. 이걸 고려하세요:
int x = First() + Second() * Third();
선행 승산 호출의 결과에 적용하는 수단 Second()
과 Third()
-하지만 First()
여전히 먼저 평가된다. 즉,이 문은 다음과 같습니다.
int lhs = First();
int rhs = Second() * Third();
int x = lhs + rhs;
자세한 내용 은 출현, 연관성 및 순서에 대한 Eric Lippert의 블로그 게시물 을 참조하십시오.
그래도 이와 같은 코드를 작성하지 않는 것이 좋습니다.
C 및 C ++와 달리 하위 식의 평가 순서는 C #에서 왼쪽에서 오른쪽 입니다. 그래서 표현
j= ++i + ++i ;
C # 에서는 잘 정의 된 동작 이 있지만 C 및 C ++ 에서는 정의되지 않았습니다 .
표현에서
b = a + (a = a + 5)
left a
가 먼저 a+5
평가 된 다음 평가되고 평가 된 a
두 하위 표현식에 할당되고 두 개의 하위 표현식이 추가 된 후에 b
value가 있습니다 15
.
표현식은 항상 왼쪽에서 오른쪽으로 평가 된 다음 왼손에 할당됩니다. 같이
a = 5
b = a + (a = a + 5)
\\b = 5 + (a = 5 + 5)
b = 15
우리는 항상 왼쪽에서 오른쪽으로 작업하고 Parens 는 합계의 일부만 그룹화하므로 항상 왼쪽에서 오른쪽으로 이동하는 것을 기억하십시오. 나는 아래 단계로 갔다
질문부터 시작해
a = 5
b = a + (a = a + 5)
이제 첫 번째 'a'를 5로 변경하십시오.
b = 5 + (a = a + 5)
이제 괄호로 합계를 합시다
b = 5 + (a = 5 + 5)
이것은 우리에게
b = 5 + 10 또는 b = 5 + (a = 10) 이라고 말할 수 있습니다.
그리고 대답은
b = 15
또한 지금
a = 10
참고URL : https://stackoverflow.com/questions/27937789/whats-happening-with-this-expression-b-a-a-a-5
'Programing' 카테고리의 다른 글
C #을 사용하여 배열에서 빈 값 제거 (0) | 2020.11.13 |
---|---|
인벤토리를 지정하지 않고 호스트를 직접 지정하지 않고 Ansible을 실행하는 방법은 무엇입니까? (0) | 2020.11.13 |
모호함을 통한 보안이 왜 나쁜 생각입니까? (0) | 2020.11.13 |
이번 주와 달의 첫날을 얻는 방법은 무엇입니까? (0) | 2020.11.13 |
NSArray에서 객체의 인덱스를 얻습니까? (0) | 2020.11.13 |