Programing

이 표현에 무슨 일이 일어나고 있습니까?

lottogame 2020. 11. 13. 07:42
반응형

이 표현에 무슨 일이 일어나고 있습니까? 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두 하위 표현식에 할당되고 두 개의 하위 표현식이 추가 후에 bvalue가 있습니다 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

반응형