내가 C++에 조예가 깊어서 글을 남기는 것이 아니라, Effecitve C++ 을 공부하는 사람들이 이 글을 보고, 도움이 되었으면 하는 생각과, 혹시 내가 틀린것이 있다면 지적해 주시지 않을까 란 생각으로 글을 올리는것임을 미리 밝힙니다. - 최익필 이번 항목은 "클래스 멤버 함수가 호환되는 모든 타입을 받아 들이기 위해선 템플릿을 사용하면 편하다" 를 주제로 이야기 한다. 템플릿의 특성은 "여러 타입의 변수에 있어 하나의 코드로 대응 시킬 수 있다" 이다. 이것은 "모든 타입"에 대해서 동일한 코드로 대응 시킬수 있다는 뜻인데.. 하필이면 "호환되는 모든 타입" 이다. 호환되는 모든 타입이라.. 무슨 뜻일까? 예제코드 1, 호환성이 이해가 될 것이다. // ikpil.com or ikpil.tist..
효율 검색 결과
내가 STL에 조예가 깊어서 글을 남기는 것이 아니라, Effecitve STL 을 공부하는 사람들이 이 글을 보고, 도움이 되었으면 하는 생각과, 혹시 내가 틀린것이 있다면 지적해 주시지 않을까 란 생각으로 글을 올리는것임을 미리 밝힙니다. - 최익필 우리말이 자주 어렵다고 생각한다. 글을 쓸 때, 문맥상 이상하게 이어지는 경우가 많기 때문이다. 그래서 "A는 B이다" 식으로 이야기를 하려고 한다. 이번 주제는 reverse_iterator.base() 가 어떻게 동작하는지에 대한 이야기이다. 왜냐하면 insert() 나 erase()로 reverse_iterator 를 사용할 수 없어, iterator 로 변환하는데 base() 함수를 사용 하기 때문이다. base()로 가리킨 iterator 는 무..
내가 STL에 조예가 깊어서 글을 남기는 것이 아니라, Effecitve STL 을 공부하는 사람들이 이 글을 보고, 도움이 되었으면 하는 생각과, 혹시 내가 틀린것이 있다면 지적해 주시지 않을까 란 생각으로 글을 올리는것임을 미리 밝힙니다. - 최익필 STL 에 있는 map 에 대한 이야기로, 이 두 함수(어찌보면 operator[] 도 함수.. 라 볼수 있다)의 특징을 알아두어 효율적인 코딩을 하자는 내용이다. 그렇다면 왜 이번 항목에선 이 둘의 효율을 주의 하고 선택하자고 했을까? .. 이것에 관련된 사항에 대해서는 링크를 첨부 한다. 2008년 5월경 나는 이런것들의 차이에 대해서 기록해 둔것이 있다. 링크 : http://www.ikpil.com/266 .. 더 자세히 간다면 .. 소스 한번 뜯..
swap 함수는 무엇일까? .. 뭐 다들 알겠고, 중요한건 이 함수를 이용하여, "교체" 를 할수 있다는것이다. 왜 이 함수가 중요한것인가? STL에 이 함수가 포함된 이래, 예외 안전성 프로그래밍에선 없어선 안 될 감초 역활로써, 자기 대입 현상의 가능성에 대처하기 위한 대표적인 매커니즘으로서 널리 사랑받아 왔다다고 저자는 설명한다; 이쁘면 얼굴값 한다고, 이 swap 함수에도 말들이 많다. 그것은 바로 효율 때문이다. 기본적으로 복사하는데에 대한 비용은 지불해야 겠지만, 지불하지 않아도 되는 경우가 있기 때문인데, 그것이 바로 다른 타입의 실제 데이터를 가리키는 포인터가 주성분인 타입의 객체(pimpl(pointer to implementation))의 swap 이다! 어떻게 하면, 이런 객체 전용의..
부재 : 가급적 선행 처리자보다 컴파일러를 더 가까이 하자. 이유 1. 컴파일러는 #define을 알아차리지 못하기 때문에, 디버그가 힘들어지기 때문이다. 주의점 1. const로 상수화 시킬때 포인터라면 데이터와 포인터 역시 막아야 한다. - const char * const authorname = "Scott Meyers"; 2. 클래스 상수 멤버상수는 static const int a = 5; 로 사용 하면 좋다. 3. 클래스를 컴파일 도중 클래스 상수(클래스에서만 쓰일) 값이 필요하다면 enum을 사용 하는게 좋다. - enum에 대한 참조자를 갖지 못한다. - 메모리를 사용하지 않는다. 4. #define 함수는 잦은 버그가 있기 때문에 inline함수를 하면 더 좋다. 이것만은 잊지 말자! 1..
부재 : virtual 의 비용은 얼마인가? 이유 1. 구현에 따라 가상 함수(virtual function)가 성능에 영향을 미치기 때문이다. 구현방법 : 구현 방법은 없으며 개념 정리된 부분을 이해 하고 있어야 한다. 개념 정리 1. 가상 함수를 사용하면 가상 테이블(virtual table)과 가상 테이블 포인터(virtual table pointer)가 생긴다. (객체의 한쪽에 vtbl 을 가르키는 vptr이 만들어 진다) 2. 구현 방법에 따라 이 vtbl은 객체의 크기와 멤버 함수가 실행될 때의 속도에 영향을 끼친다. 3. 가상함수는 인라인 효과를 얻을 수 없다. 4. 가상상속(다이아몬드 상속을 피하기 위해)을 하면, 가상 기본 클래스의 포인터도 객체에 포함되어 덩치가 커진다. 5. RTTI는..
최근댓글