귀하의 질문에 대한 유일한 대답은 다음과 같습니다 .
좋아요, 모두 저를 태우기 전에 ..
당신은 모두 왜 i+=i++결과가 좋고 논리적 인지 대답 했습니다 i=0.
나는 당신의 대답의 각각 1 개마다 투표를하고 싶은 유혹을 받았지만 내가 계산 한 평판은 너무 높을 것입니다.
내가 왜 너 한테 화났어? 당신의 대답이 설명하기 때문이 아닙니다.
내가 읽은 모든 대답은 불가능을 설명하기 위해 놀랄만 한 노력을 다했습니다. 저는 박수를 보냅니다!
그러나 결과는 무엇입니까 ?? 직관적 인 결과입니까-수용 가능한 결과입니까?
여러분 각자는 "나체의 왕"을 보았고 어떻게 든 합리적 왕으로 받아 들였습니다.
당신은 모두 잘못입니다!
i+=i++;결과 0는 정의 되어 있지 않습니다.
당신이 .. 또는 심지어 더 나쁜 경우 언어 평가 메커니즘의 버그! 디자인의 버그.
증거를 원하십니까? 물론 당신이 원하는!
int t=0; int i=0; t+=i++; //t=0; i=1
이제 이것은 ... 직관적 인 결과입니다! 우리는 처음 t에 값으로 할당을 평가했기 때문에 평가와 할당 후에 만 사후 작업이 발생했습니다. 합리적이지 않습니까?
다음 i=i++과 i=i같은 합리적 i입니까?
동안 t=i++과 t=i다른 결과가 i.
사후 작업은 명령문 평가 후에 발생해야합니다.
따라서:
int i=0;
i+=i++;
우리가 쓴다면 동일해야합니다 :
int i=0;
i = i + i ++;
따라서 다음과 같습니다.
int i=0;
i= i + i;
i ++;
따라서 다음과 같습니다.
int i=0;
i = i + i;
i = i + 1;
1합리적인 사고를한다면, 컴파일러의 버그 나 언어 디자인의 버그를 나타내지 않는 결과가 나옵니다. 그러나 MSDN과 다른 많은 출처들은 우리에게 "이것은 정의되지 않았습니다!"라고 말합니다.
지금까지 계속하기 전에, 내가 제시 한이 일련의 사례조차도 어느 누구도지지하거나 인정하지 않습니다. 그러나 이것은 직관적이고 합리적인 방식에 따른 결과였습니다.
코더는 어셈블리를 작성하거나 번역하는 방법을 알지 못합니다!
언어 정의를 존중하지 않는 방식으로 작성된 경우 버그입니다!
그리고 내가 위키 백과에서이 복사칩니다 증가 및 감소 연산자 :
증가 / 감소 연산자의 수정 피연산자 때문에, 동일한 표현식 내에서 피연산자 두 번 이상 같은의 사용은 정의되지 않은 결과를 생성 할 수 있습니다 . 예를 들어, x-++ x와 같은 표현식에서 빼기 및 증분 연산자를 어떤 순서로 수행해야하는지 명확하지 않습니다. 이와 같은 상황은 컴파일러가 최적화를 적용 할 때 더욱 악화되어 작업 실행 순서가 프로그래머가 의도 한 것과 다를 수 있습니다.
따라서.
정답은 이것을 사용해서는 안된다는 것입니다! (정의되지 않았으므로!)
예 ..-C # 컴파일러가 어떻게 든 정규화하려고하더라도 예측할 수없는 결과가 있습니다.
나는 당신의 모든 행동을 묘사하는 C #에 대한 문서를 찾지 못했습니다. 내가 찾은 것은 정반대입니다!
[ Postfix 증가 및 감소 연산자에 대한 MSDN 설명서에서 복사 : ++ 및- ]
접미사 연산자가 함수 인수에 적용되면 인수 값 이 함수로 전달되기 전에 증분되거나 감소 되지 않을 수 있습니다. 자세한 내용은 C ++ 표준의 1.9.17 단원을 참조하십시오.
그 말이 보장되지는 않습니다 ...
그 대답이 거만 해 보인다면 용서하십시오. 저는 거만하지 않습니다. 나는 단지 수천 명의 사람들이 여기에 와서 배우고 내가 읽은 대답이 그들을 오도하고 그들의 논리와 주제에 대한 이해를 해칠 것이라고 생각합니다.