{

왜냐하면, 함수의 인자 처리 순서는 각 컴파일러마다 다르며, 컴파일러 버전마다 다를 수도 있다.  결국 함수 인자의 처리 순서를 예상하고 함수에 인자를 전달한다면, 나중에 문제가 생길 위험이 있다. 그러니 이번 항목에서 말하는 제목을 반드시 기억해 두는 것이 좋다.

이 책은 안드레이 안렉산드레스쿠(Andrei Alexandrescu)와 허브 셔터(Herb Sutter) 가 만든 책으로 허브 셔터는 자신의 Exceptional C++ 에서 "스마트 포인터를 잘 사용하는 방법"에 대해서 썻던 항목들에, 이 문제점도 같이 정리해 두었었다. 그러므로 나는 이 항목에 대해서 더 이야기 하지는 않을 것이다.

왜냐하면 아주 간단하게 예만 보여줘도 충분히 이해 가능하기 떄문이다. 이 예제코드는 함수의 인자 처리 순서가 항상 어떤 컴파일러든지 동일하며, 예외에 더 안전하다.

예)


이 코드는 가독성 상 좀 좋지 못하다. 왜냐하면 함수 내부에서 값이 변경 된다는 것을 전혀 함수 본체를 보지 않고선 모르기 때문이기도 하며, boost::shared_ptr을 사용 할 줄 아는 사람들도 왜 저렇게 했지? 라고 생각 할 수도 있기 때문이다. 간단하게 이번 항목에서 무엇을 말하고자 하는지만 보여주기 위한 것이므로 크게 신경 쓰지 말아 달라.

f의 함수에 a 와 b를 전달할 때, 그 순서를 함수의 호출 코드에 같이 넣어주지 않고, 함수의 위쪽에서 미리 선언해 둠으로써, 예외가 발생되어도 안전하며, 함수의 인자의 호출 순서는 항상 a 다음에 b가 오기 때문이다.

만약 더 깊게 들어가고 싶다면, 허브 셔버터의 Exceptional C++ 이나 스콧 마이어스의 Effective C++ 을 보고, 공용 라이브러리 boost의 코드를 보면 될 것이라 생각 된다.

자~ 이번 항목도 패스!

}

'책 정리 > C++ Coding Standards : C++ 코딩의 정석' 카테고리의 다른 글

항목 36 : 추상 인터페이스를 활용하라. ( Prefer providing abstract interfaces. )  (0) 2009.03.02
항목 35 : 기반 클래스로 디자인되지 않은 클래스로부터의 상속을 피하라. ( Avoid inheriting from classes that were not designed to be base classes. )  (0) 2009.03.01
항목 34 : 상속성을 주의해서 사용하라. ( Prefer composition to inheritance. )  (0) 2009.02.28
항목 33 : 최소화된 클래스를 사용 하라. ( Prefer minimal classes to monolithic classes. )  (0) 2009.02.27
항목 32 : 만들고 있는 클래스가 무엇인지 확실히 하라. ( Be clear what kind of class you’re writing. )  (0) 2009.02.26
항목 31 : 함수의 인자의 처리 순서에 좌우되는 코드는 좋지 않다. ( Don’t write code that depends on the order of evaluation of function arguments. )  (0) 2009.02.26
항목 30 : &&, || 그리고 콤마의 오버로딩은 피하라. ( Avoid overloading &&, ||, or , (comma) )  (0) 2009.02.26
항목 29 : 간접적인 타입 변환을 피하기 위해 오버로딩을 활용하라. ( Consider overloading to avoid implicit type conversions. )  (0) 2009.02.25
항목 28 : ++와 --의 표준적인 형식과 접두 형식을 사용하라. ( Prefer the canonical form of ++ and --. Prefer calling the prefix forms. )  (0) 2009.02.25
항목 27 : 표준적인 형식의 산술 및 할당 연산자를 사용하라. ( Prefer the canonical forms of arithmetic and assignment operators. )  (0) 2009.02.25
항목 26 : 오버로딩된 연산자의 본래 의미를 유지하라. ( Preserve natural semantics for overloaded operators. )  (0) 2009.02.24
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기

댓글을 달아 주세요

">