목록공부엔 끝이없다/Effective C++ (6)
Hyun2and

포인트 모든 타입에 대해 암시적 타입 변환을 지원하는 템플릿과 관계가있는 함수를 제공하는 클래스 템플릿을 만들려고 한다면, 클래스 템플릿 안에 프렌드 함수로 정의한다 클래스 템플릿 안에 작성하면 인라인으로 정의되므로 도우미 함수를 따로 생성한다 정리 항목 24 : 타입 변환이 모든 매개변수에 대해 적용되어야 한다면 비멤버 함수를 선언하자 와 관련이 있는 항목 ✔️ 이전의 예시를 템플릿으로만 바꿔주자 template class Rational { public: Rational (const T& numerator = 0, const T& denominator = 1); const T numerator() const; const T ddenominator() const; }; template const Rat..

(처음엔 이름이 길다고 생각했지만 보면 볼수록 항목 이름을 간결하게 잘 지은 것 같다) 포인트 모든 타입을 받아들이는 멤버 함수를 만들려면 멤버 함수 템플릿을 쓰면 된다 복사 생성자와 복사 대입 연산자는 직접 선언해야 한다!! 정리 - 스마트 포인터 : 힙 기반 자원을 타이밍맞게 삭제해준다 (항목 13 참고) - 반복자 iterator : 단순연산을 지원한다 ( ++, -- 등) 포인터 : 암시적 변환을 지원함. 스마트포인터는 각 포인터들이 별개이기 때문에 변환 클래스를 직접 만들어야 한다 -> std::static_pointer_cast() 을 쓰면 Cast 가 되는 것 아닌가? 더보기 책이 옛날책이라 auto_ptr 을 사용하는 예시를 쓰고있다 ! 항목13에는 shared_ptr 이 tr1 라이브러리..

포인트 템플릿으로 코드 비대화가 생긴다. (암시적이기 때문에) 템플릿 매개변수를 함수 매개변수나 멤버 데이터로 넣음으로써 해결할 수 있다. 동일한 이진 구조(long, int) 에 대해서는 한가지 함수 구현(void)을 공유하게 만든다. 정리 코딩 시간 절약, 코드 중복 회피라는 템플릿의 장점을 누리다보면 코드 비대화 (code bloat)가 발생한다. -> 코드 비대화 : 똑같은 애용의 코드와 데이터가 여러 벌로 중복되어 이진 파일로 구워진다) 코드 비대화를 해결하기 위한 방법 공통성 및 가변성 분석 어렵게 써놓았지만,, 코드 비대화를 해결하기 위해 평소에 코드의 비슷한 부분을 추려서 함수로 빼고, 그 부분이 필요한 곳에 함수들을 호출하도록 바꾸는 과정. 클래스와 템플릿에도 동일한 과정을 거치면 됨 그..

포인트 파생 클래스에서 기본 클래스 템플릿의 이름을 참조할 때는, this-> 를 붙이거나 기본 클래스 한정문을 명시적으로 써준다 예제 코드 (대부분은 비워놓은 내부 코드들) #include using namespace std; class CompanyA { public : void sendCleartext(const string& msg) {}; }; class CompanyB { public: void sendCleartext(const string& msg) {}; }; class CompanyZ { public: void sendCleartext(const string& msg) {}; }; class MsgInfo { }; template class MsgSender { public: void ..
1: C++ 언어들의 연합체 C++는 다중패러다임 프로그래밍 언어 라고 부른다 절차적 프로그래밍을 기본으로 하여 객체 지향, 함수식, 일반화 프로그래밍, 메타 프로그래밍을 포함한다 TMP : 템플릿 메타프로그래밍. C++의 일반화 프로그래밍 부분 STL : 템플릿 라이브러리 컨테이너, 반복자, 알고리즘, 함수 객체 C와의 차이점 C에서는 기본적으로 값 전달이 참조 전달보다 좋다. C++에서는 생성자, 소멸자가 생기고, 템플릿을 쓰다보면 해당 객체의 타입을 알 수 없기 때문에 const 객체 전달이 가장 좋다 그러나, STL은 값 전달이 좋다 (C 기반이기 때문에) 2: #define 보다 const, enum, inline 컴파일러를 더 가까이하자 #define 을 쓰면 선행 처리 과정에서 이미 상수로 ..
size_t 부호 없는 정수 타입을 typedef로 정의한 것 개수를 셀 때 쓰는 타입 (char* 기반 문자열의 크기, STL 컨테이너의 원소 개수 등) operator[ ] 에서도 받도록 한다 Explicit 암시적 변환이 불가능한 타입 명시적으로 변환해주어야 매개변수 등으로 쓸 수 있다 Undefined Behavior 실행 시간에 어떤 현상이 터질지 확실히 예측할 수 없는 동작 널포인터를 역참조하거나 char 배열 마지막에 널문자가 들어가거나 유효하지 않는 배열 index를 참조하면 안된다는 것