{ 왜냐하면 의도하지 않은 이름 검색으로 혼란을 격게 되기 때문이다. 항목 57에서 이야기 했던 것의 반대 이야기이니, 크게 더 설명할 것이 없다. 이름 검색을 알게 되면, 함수의 호출이 머리속에 그려지기 때문에, 이상한 함수 호출이나 이상한 에러메세지는 "이름 검색이 꼬였나?" 를 생각해 보면 된다. }
책 정리/C++ Coding Standards : C++ 코딩의 정석 검색 결과
{ 클래스의 일부가 되게끔 디자인된 비멤버 함수의 경우, 클래스와 같은 네임스페이스 내에 넣어야 한다는 것이다. 왜!? C++의 이름 검색 시스템 때문이다. 이 이름 검색 시스템은 Koenig lookup 라고도 불린다. 해당 사항을 자세히 말해 줄 수 있는가? 물론 말해 줄 수 있다. Exceptional C++ 항목 31 ~ 항목 34 에 무척 자세히 나와 있고, ikpil.com 에서 검색해도 어느 정도 나오니 한번 검색해 봄이 좋을 것 같다. 넣게 되면 무엇이 좋아 지는가? 최소한 컴파일러가 혼란을 겪는 것을 줄여 주고, 개발자 또한 혼란을 겪는 것을 줄여 줄 수 있다. 간략하게만 소개해 줄 수 있나? #include void swap( std::string const& str1, std::str..
{ 왜냐하면 swap은 강력한 도구로 만들어 주기 때문이다. 무엇을 위한 강력한 도구인가? 안전한 복사를 위한 것이다. 안전한 복사는 어떻게 만들 수 있는가? 여러가지 방법이 있지만, pimpl 이디엄이 가장 널리 쓰인다. 그리고 임시객체를 이용한 방법도 널리 쓰인다. 어떻게 만드는가? ... 귀찮.. 책을 보시라 ㅋㅋ }
{ 왜냐하면, 일반적이기 때문이다. 정규형 할당 방식이 무엇인가? 비가상 operator=을 말하는 것이다. 가상 operator= 를 만들면 안되나? 모든 사람들이 일반적으로 operator=에 가상성을 부여하지 않기 때문에, 많이 혼란스러울 수 있기 때문에 만들면 안된다. 다형적 복사를 원한다면 virtual Clone 함수를 만들어서 사용 하는게 더 좋다. }
{ 개체의 조각화는 무엇인가? 기반 클래스 B와 상속 클래스 D가 있다고 했을 때, D의 객체가 B의 객체로 잘리는 현상을 말한다. 예를 들 수 있는가? #include class B { public: B() : a_(0) { } public: virtual void Draw() { std::cout
{ 즉, 컴파일러가 만든 copy constructor 와 operator= 을 사용 할지, 내가 정의한 것들을 사용 할지, 아니면, 이것 자체를 사용 할지 말지를 명확하게 하라는 것이다. 왜냐하면, 컴파일러는 기본적으로 이 두 가지 fuction 을 만들기 때문이다. 그냥 가만히 있다가, 되니까 문제 없겟지 하다가, 되니까 그냥 맞아야지 가 된다. }
최근댓글