"x-의 일부 '반환'가치가 필요하다는 생각이 들었는지 모르겠다." 첫째, 당신이 의미하는 바가 정확히 분명하지 않습니다. 둘째로, 당신이 무엇을 의미하는지에 관계없이 이것은 x = x--
에서 정의되지 않은 행동의 근원과 관련이없는 것처럼 보입니다.
x = x--
은 중재 시퀀스 포인트없이 x
을 두 번 수정하려고하므로 정의되지 않은 동작이 발생합니다. 어떤 "반환 값"에 대해서도 "필요"가 없습니다.
x = x--
의 근본적인 문제는 정의되지 않은 순서로 정의되지 않은 순간에 발생하는 두 가지 부작용이 있다는 것입니다. 하나의 부작용이 할당 연산자에 의해 발생합니다. 또 다른 부작용은 접미어 --
연산자에 의해 소개됩니다. 두 부작용은 동일한 변수 x
을 수정하려고 시도하며 일반적으로 서로 모순됩니다. 이것이 그러한 경우의 행동이 정의되지 않은 것으로 선언 된 이유입니다. x
의 원래 값 5
있었다면
는 예를 들어, 다음 식은 동시에 4
(감소의 부작용) 및 5
(할당 부작용) 모두가 될 x
필요하다. 말할 것도없이,은 현재 4
과 5
이 될 수 없습니다.
UB가 발생하는 데 이와 같은 직접적인 모순 (예 : 4
vs 5
)이 필요하지 않지만. 끼어 들지 않는 시퀀스 포인트없이 동일한 변수에 두 개의 부작용이 발생할 때마다 이러한 부작용이 변수 일치에 넣으려는 값이더라도 그 동작은 정의되지 않습니다.
출처
2011-02-07 17:33:29
AnT
공식적인 이유 외에도'x = x -; '를 쓰면 이해가 안되기를 바랍니다. 'x -;'라고 쓰거나'x = x -; '의 두 번째'-'를'1' ... –
@R로 대체하십시오. 나는 'x => 0'이'x = x -'처럼 정의되지 않은 이유는 무엇인가? –
공식적인 관점에서,'x'는 한 번만 수정되기 때문에. 상식적인 견지에서 볼 때, 이것은'--' 연산자의 전체적인 포인트이기 때문에 수정하고 lvalue하고 오래된 값을 산출합니다. 비린내 같은 일은 일어나지 않습니다. –