{

클래스의 일부가 되게끔 디자인된 비멤버 함수의 경우, 클래스와 같은 네임스페이스 내에 넣어야 한다는 것이다.

왜!?
 C++의 이름 검색 시스템 때문이다. 이 이름 검색 시스템은 Koenig lookup 라고도 불린다.

해당 사항을 자세히 말해 줄 수 있는가?
 물론 말해 줄 수 있다. Exceptional C++ 항목 31 ~ 항목 34 에 무척 자세히 나와 있고, ikpil.com 에서 검색해도 어느 정도 나오니 한번 검색해 봄이 좋을 것 같다.

넣게 되면 무엇이 좋아 지는가?
 최소한 컴파일러가 혼란을 겪는 것을 줄여 주고, 개발자 또한 혼란을 겪는 것을 줄여 줄 수 있다.

간략하게만 소개해 줄 수 있나?


여기서 볼수 있듯이 swap() 함수를 정의 하고 swap() 을 호출했는데 내가 정의한 swap()은 호출 되지 않고 std::swap 중 가장 알 맞은 녀석으로 호출 된다.

std::를 명시하지도 않았는데, 이게 무슨 쌩뚱 맞은 현상인가?
 바로 Koenig lookup 때문인데, 함수의 인자의 네임스페이스로 해당 함수를 자동으로 검색한다. 또한 함수 내부에선 그 네임스페이스 역시 보이게 된다. 자세한건 다시 말하지만 Exceptional C++ 항목 31 ~ 34 에 나온다는 것을 기억하라~ ikpil.com 에 정리해 두었기도 하고. ㅋ

이 때문에, 타입과 그에 따른 비멤버 함수는 같은 네임스페이스에 넣어서 혼란을 막으라는 것이다. : )

}

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

항목 62 : 예외가 모듈의 경계를 넘어 전달되는 것을 막아라. ( Don’t allow exceptions to propagate across module boundaries. )  (0) 2009.04.11
항목 61 : 헤더 파일 내에는 서로 연결된 엔티티를 정의해서는 안된다. ( Don’t define entities with linkage in a header file. )  (0) 2009.04.11
항목 60 : 서로 다른 모듈에서의 메모리 할당과 해지는 피하라. ( Avoid allocating and deallocating memory in different modules. )  (0) 2009.04.11
항목 59 : 헤더 파일 내에 또는 #include 앞에 네임스페이스 using을 써서는 안 된다. ( Don’t write namespace usings in a header file or before an #include. )  (0) 2009.04.08
항목 58 : 특별히 함께 작동하게끔 의도된 경우가 아니라면 타입과 함수는 분리된 네임스페이스에 넣어라. ( Keep types and functions in separate namespaces unless they’re specifically intended to work together. )  (0) 2009.04.08
항목 57 : 타입과 그의 비멤버 함수는 같은 네임스페이스 내에 넣어라. ( Keep a type and its nonmember function interface in the same namespace. )  (2) 2009.04.08
항목 56 : 필요하다면 실패가 없는 swap을 활용하라. ( Whenever it makes sense, provide a no-fail swap (and provide it correctly) )  (0) 2009.04.06
항목 55 : 정규형의 할당 방식을 사용하라. ( Prefer the canonical form of assignment. )  (0) 2009.04.06
항목 54 : 개체의 조각화를 피하라. 기반 클래스 내에서의 복사보다는 Clone을 활용하라. ( Avoid slicing. Consider Clone instead of copying in base classes. )  (0) 2009.04.06
항목 53 : 복사의 허용 여부는 명확하게 지정하라. ( Explicitly enable or disable copying. )  (0) 2009.04.06
항목 52 : 일관된 방식으로 복사하고 제거하라. ( Copy and destroy consistently. )  (0) 2009.04.03
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기

댓글을 달아 주세요

">
  1. 지나가는 행인
    2010.04.27 14:20

    죄송하지만... Koenig lookup이 맞는거 같네요.(오타이신듯...)
    블로그 잘보고 있습니다 ^^;;