2008.10.08 11:17 책 정리/Exceptional C++

이번 항목은 디버깅에 있어 정말 난해한 자동 변환에 대해서 알아본다. 자동 변환은 사용자 입장(함수들..)에선 편하지만, 구현자 입장(프로그래머)에서 보면 정말 염두해야 한다. 그 이유를 알아보자.

표준 C++ string 은 const char*로의 어떠한 암시적 변환을 가지지 않는다. 다음 코드를 보면 정말 필요할 듯 한데 말이다.


이 코드의 에러 나는 부분에서 알아서 형 const char* 형태로 변환되면 얼마나 좋을까? 어챂 const char* 라면 변경될 일을 미리 막았는데 말이다.(물론 캐스팅 변환으로 가능하긴 하나 일반적으로 const는 안건드는게 좋다 )

문제 : 정말 내부 변환이 필요 없을까?

 

분석
나는  있으면 좋겠다고 생각 했다. 하지만 자동 변환으로 생기는 문제점은 어떻게 해결해야 하는가에 대한 답을 못하였다. 그러므로 사용하지 않는게 오히려 더 깔끔한 코딩이 가능해진다는 결론이 나온다.

그렇다면, 어떨때 자동 변환이 문제를 갖게 될까?

우선 자동 변환을 시키는 녀석이 누군지 안다면, 의심해볼 법 하다. 자동 변환은 우리의 컴파일러가 "알아서" 해준다. 여기서 "알아서"가 중요하다. 컴파일러가 모든 상황에 대해서 정확하게 판단 할수 없으므로(이런 컴파일러가 나온다면 정말 많은 돈을 끌어 모울 수 있을 것이다), 한가지 조건을 걸었다.

조건은 자동 변환이 될 수 있는 모든 상황에선 자동변환을 한다. 컴파일러는 이런 로직으로 움직인다. 이것은 다음과 같은 코드에 문제를 발생 시킬 수 있다.


다음과 같은 코드가 const char* 로 - 가 된다면, s1에는 무엇이 들어 가겠는가?

총평
짧지만, 굵은 이야기를 하고 있다. 사용자 입장에서 편하다고 막 자동변환을 허락해 준다면, 오히려 더 큰 문제를 불러 일으키게 될 것이다. 명시적(멤버 메소드 호출)으로 바꾸는것이 안전하다면, 오히려 그게 더 편하다는 것을 기억해야 한다. 수 만은 책에서 자동 변환은 경계해야 한다고 말하고 있으니, 조심하자

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

댓글을 달아 주세요