[ Effective C++ ] 정리 모음집
" C++ 프로그래머의 필독서, 스콧 마이어스의 Effective C++ 를 읽고 내용 요약 / 정리 "
" 제목이 곧 핵심! "
- 최초에 상정된 표준 C++ 라이브러리의 주요 구성요소는 STL, iostream, 로케일 등이며, 여기에는 C89의 표준 라이브러리도 포함되어 있다!
- TR1이 도입되면서 추가된 것은 스마트 포인터, 일반화 함수 포인터, 해시 기반 컨테이너, 정규 표현식 그리고 그 외의 10개 구성요소이다!
- TR1 자체는 단순히 명세서일 뿐, TR1의 기능을 사용하기 위해서는 명세를 구현한 코드를 구해야 한다. TR1 구현을 구할 수 있는 자료처 중 한 군데가 바로 부스트이다!
- 컨테이너(vector, string, map 등), 반복자, 알고리즘(find, sort 등), 함수 객체(less, greater 등) 외에 컨테이너 어댑터와 함수 객체 어댑터가 있다
- 사용자 정의 버퍼링, 국제화 기능이 가능한 입출력 지원
- cin, cout, cerr, clog 등의 사전정의 객체를 지원
- 여러 로케일을 활성화시킬 수 있는 기능 포함
- wchar_t 등의 타입 및 wstring을 쓰면 유니코드를 사용할 수 있다
- 복소수를 나타내는 템플릿(complex) 및 수치 배열을 나타내는 템플릿(valarray)이 여기에 해당된다
- 최상위 클래스인 exception 및 이것으로부터 갈라져 나온 파생 클래스들이 포함된다
- 1989년 버전의 C에 포함된 표준 라이브러리는 전부 C++에도 들어 있다
- shared_ptr
, weak_ptr
이 여기에 해당
- 동작은 기본제공 포인터와 똑같으나, 하나의 실제 객체를 가리키는 자신과 같은 포인터의 개수를 유지해 놓는(참조 카운팅)방식을 지원하는 포인터
- TR1 에서 가장 폭넓게 쓰인다
- 어떤 함수가 가진 시그니처와 호환되는 시그니처를 갖는 함수호출성 객체의 표현을 가능하게 해 주는 템플릿
- 현역 STL 바인더로 잘 쓰이고 있는 bind1st 및 bind2nd와 똑같이 동작함은 물론, 그보다 훨씬 더 많은 기능이 있는 범용 바인더
- 세트, 멀티세트, 맵, 멀티맵을 구현하는 데 이 해시 테이블이 쓰였다
- 정규 표현식 기반의 탐색과 문자열에 대한 대체 연산이 가능하며, 일치되는 원소들 사이의 순회도 지원한다
- 종래의 표준 라이브러리에 원래 있었던 pair 템플릿의 신세대 버전, pair 객체의 경우에는 두 개만 담을 수 있는 반면, 투플 객체는 몇 개라도 담을 수 있다
- begin 및 end 등의 멤버 함수를 지원하는 배열, 객체의 크기가 컴파일 과정에서 고정되어 동적 메모리를 쓰지 않는다
- 멤버 함수 포인터를 적응시키는 용도에 쓸 수 있는 템플릿
- 기존의 참조자가 객체처럼 행세할 수 있도록 만들어 주는 템플릿
- 참조자를 담은 것 처럼 동작하는 컨테이너를 만들 수 있다
- rand 함수보다 몇 배는 우수한 난수 발생 기능
- 라게르 다항식, 베셀 함수, 완전 타원 적분 등
- C99의 새로운 라이브러리를 C++로 가져올 목적으로 설계된 함수 및 템플릿 모음
- 주어진 타입에 대한 컴파일 타임 정보를 제공하는 특성정보 클래스
- [ 항목 47 : 타입에 대한 정보가 필요하다면 특성정보 클래스를 사용하자 ] 참조
- 어떤 함수 호출의 반환 타입을 추론해 주는 템플릿