pair<int, int> 도, int 두개도, 모두 엄밀하게는 안됩니다. 이 코드는 undefined behavior 라서 그렇습니다..
C++11에서 sequence point에 대한 스펙 개정이 생겼는데, 이 때문에 컴파일러 구현 방식이 바뀌어서 동작이 달라지는 것으로 추정할 수 있겠네요.
http://stackoverflow.com/questions/28782068/undefi... 를 보면 자세한 설명이 나와있으니 참고하세요. (실행되는 순서에 따라 어떻게 값이 변하는지)
http://stackoverflow.com/questions/20842602/swappi... 도 도움이 될것 같네요.
한줄요약 : XOR SWAP 같은거 쓰는거 아닙니당..
pichulia 9년 전
pair<int, int> x;
x.first ^= x.second ^= x.first ^= x.second;
위의 코드는 pair변수인 x의 first와 second 값을 서로 교환하는 평범한 코드입니다.
근데 위의 코드를 C++로 채점했을 땐 오답이 뜨고
C++11로 채점했을 땐 정답이 뜨는 현상이 생겼는데요...
그 말은 C++ 4.6.3버젼 컴파일러에서는 저 위의 함수가
원하는대로가 아니라, 기묘하게 동작함을 의미하는거 일테지요....
int형이나 char 변수가 아닌 float 등은 저 ^= swap이 안먹힌다는건 이미 알고있었는데 (컴파일에러를 띄워주니까)
pair 자료구조도 안먹힌다는건 처음 알았습니다...
원인이 무엇일까요?