오늘 슬랙을 보다가 재미난 글 이 올라왔다.
|
|
C++에 새로운 연산자가 추가되었다는 내용이였는데, while
문에 -->
를 쓰면 x가 하나씩 줄면서 반복문을 돌게 된다는 것이다.
처음 봤을 때는 재미있는 연산자가 추가되나보다 생각을 했다. 근데 글을 더 읽어보니 이게 이전 버전의 C++에서도 동작을 한다는 것이였고, 실제로 돌려보니 동작을 했다! 여기서 뭔가 이상하다고 생각을 해서 자세히 보니까 진실을 알게 되었다.
|
|
실제로는 x에 --
연산자가 붙고, x--
가 0보다 큰지 검사하는 구문이다. 이걸 띄어쓰기를 적절히 활용해서 마치 -->
라는 새로운 연산자가 있는것처럼 보이는 것이다.
이 사실을 알았을 때, 어이가 없으면서 재미있었다. 이처럼 C++에서는 재미있는 상황이 많이 있는 것 같다.
C++에서 볼 수 있는 또다른 재미있는 상황이 있다.
|
|
배열에 있는 값에 접근을 할 때, 컴파일러는 위와 같이 처리를 한다. 여기서 +는 앞뒤를 서로 바꿔도 같은 값이기 때문에, 아래의 식들도 모두 같다.
|
|
이를 응용하면 다음과 같은 끔찍한(!) 코드도 실행이 된다.
|
|
어떻게 보면 언어의 결함이라고 볼 수 있을 것 같다. 저런건 컴파일러 단계에서 막을 수 있을 것 같은데 왜 막지 않았을까?