{
왜냐하면, 함수의 인자 처리 순서는 각 컴파일러마다 다르며, 컴파일러 버전마다 다를 수도 있다. 결국 함수 인자의 처리 순서를 예상하고 함수에 인자를 전달한다면, 나중에 문제가 생길 위험이 있다. 그러니 이번 항목에서 말하는 제목을 반드시 기억해 두는 것이 좋다.
이 책은 안드레이 안렉산드레스쿠(Andrei Alexandrescu)와 허브 셔터(Herb Sutter) 가 만든 책으로 허브 셔터는 자신의 Exceptional C++ 에서 "스마트 포인터를 잘 사용하는 방법"에 대해서 썻던 항목들에, 이 문제점도 같이 정리해 두었었다. 그러므로 나는 이 항목에 대해서 더 이야기 하지는 않을 것이다.
왜냐하면 아주 간단하게 예만 보여줘도 충분히 이해 가능하기 떄문이다. 이 예제코드는 함수의 인자 처리 순서가 항상 어떤 컴파일러든지 동일하며, 예외에 더 안전하다.
예)
이 코드는 가독성 상 좀 좋지 못하다. 왜냐하면 함수 내부에서 값이 변경 된다는 것을 전혀 함수 본체를 보지 않고선 모르기 때문이기도 하며, boost::shared_ptr을 사용 할 줄 아는 사람들도 왜 저렇게 했지? 라고 생각 할 수도 있기 때문이다. 간단하게 이번 항목에서 무엇을 말하고자 하는지만 보여주기 위한 것이므로 크게 신경 쓰지 말아 달라.
f의 함수에 a 와 b를 전달할 때, 그 순서를 함수의 호출 코드에 같이 넣어주지 않고, 함수의 위쪽에서 미리 선언해 둠으로써, 예외가 발생되어도 안전하며, 함수의 인자의 호출 순서는 항상 a 다음에 b가 오기 때문이다.
만약 더 깊게 들어가고 싶다면, 허브 셔버터의 Exceptional C++ 이나 스콧 마이어스의 Effective C++ 을 보고, 공용 라이브러리 boost의 코드를 보면 될 것이라 생각 된다.
자~ 이번 항목도 패스!
}
최근댓글