이번 항목은 C++의 문법 연습이라 할 수 있겠다.


기본적으로 C++ 컴파일러가 여러 기호들을 해석하는 규칙을 알아야 생각해 볼 수 있을 것이다. 컴파일러는 기본적으로 토큰을 최대한 길게 잡는다. 왜냐하면 이것은 보다 빠른 파싱의 기본 원리이기 때문이다. 만약 토큰을 최소 단위로 한다면, 파싱이 더 어려워져서 컴파일 타임이 정말 길어 질 것이다.

비유를 한다면, 책을 책장에 넣으려 할 때, 책을 크기 순으로 넣게 되면, 크기로도 책을 손 쉽게 찾을 수 있다. 물론 이름 순으로 정리해도 되고, 장르순으로도 정리해도 된다. ^^( 컴퓨터는 아무래도 크기 순이 더 편할 듯 하다. )

1 ) 하나의 유효한 C++ 프로그램에서, 더하기 기호(+)가 연달아(중간에 빈칸 없이) 나올 수 있는 최대 개수는 몇개인가?

예제코드로 테스트 해보니,


만약 객체라면, operator+ 과 operator++ 를 정의 하여, 무제한으로도 할 수 있을 것이다.


2 ) 다음의 기호들은 각각 얼마나 연달아 나올 수 있는가?

a. &

b. <

c. |


a. &

역시 코드로 보자.

책에선 연산자 &&&&& 총 5개까지 가능하다고 하나, MSVC 2005 에선 연산자 오버로드시 매개변수로 두개 다 포인터로 전달 할 경우, 컴파일 타임 에러를 벹어 낸다. MSDN 참조 : http://msdn.microsoft.com/ko-kr/library/zy7kx46x(VS.80).aspx

전역의 연산자 오버로딩 시에는 클래스형을 매개변수로 하는 경우만 가능하며, 포인터는 가능하지 않는다고 한다. 만약 주소값을 넘겨야 할 경우, 레퍼런스 형태로 넘겨서, 처리 하라고 나온다. ...

혹시 다른 컴파일러에선 어떻게 되는지 알고 싶습니다~_~

b. <

a와 같은 요령으로 4개, &는 어는 안쓰니 4개가 한계다.

c. |

이것도 마찬가지


그렇다면 C++ 에서 ? 는 몇개나 올 수 있을까?

삼중자를 사용 하면 3개 이다. 1 ???-0 : 0 이라고 하면, ??- 는 ~ 로 변환 된다.


총평

음 operator 재정의 시, 포인터는 안되는 구나를 알게 되었다. 아마도 다른 컴파일러와 다를 듯 한데, 좀 더 지켜봐야 겠다.

신고
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요