이번 항목은 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 재정의 시, 포인터는 안되는 구나를 알게 되었다. 아마도 다른 컴파일러와 다를 듯 한데, 좀 더 지켜봐야 겠다.
'책 정리 > Exceptional C++ Style' 카테고리의 다른 글
항목 38 : 일체적 클래스의 해악, 2부 : std::string 리팩토링 ( 난이도 : 5 ) (0) | 2009.02.04 |
---|---|
항목 37 : 일체적 클래스의 해악, 1부 : std::string의 사례 ( 난이도 : 3 ) (0) | 2009.02.02 |
항목 36 : 생성되는 객체를 가진 공용체 ( 난이도 : 4 ) (0) | 2009.02.02 |
항목 35 : 일반적 콜백 ( 난이도 : 5 ) (0) | 2009.02.02 |
항목 34 : 색인 테이블 ( 난이도 : 5 ) (0) | 2009.02.01 |
항목 32 : 오타 또는 C++의 생소한 표기법 (0) | 2009.01.26 |
항목 31 : 이상한 코드 ( 난이도 : 4 ) (2) | 2009.01.26 |
항목 30 : double 과 float ( 난이도 : 4 ) (0) | 2009.01.26 |
항목 29 : 초기화인가 아닌가? ( 난이도 : 3 ) (0) | 2009.01.25 |
항목 28 : 키워드의 비밀 ( 난이도 : 3 ) (0) | 2009.01.24 |
최근댓글