본문 바로가기

책 스터디

(10)
[Exceptional C++ Style] 1. vector의 올바른/잘못된 용법 STL의 vector는 가장 흔하게 사용되는 컨테이너 중 하나이다. C/C++의 배열을 표방하고 있으며, operator []를 제공함으로써 사용법도 크게 낯설지 않다. 하지만, 사용 빈도에 비례하여 잘못된 용법으로 사용하는 경우도 그만큼 많다. 신참 질문 "vector v" 가 주어졌을 때, 아래의 줄 A와 B의 차이는 무엇일까? void f(const vector& v) { v[0]; // A v.at(0); // B } 위 예제에서 A와 B 라인은 벡터 요소에 접근하는 두 가지 방법을 보여주고 있다. vector v의 0번째 인덱스에 요소가 존재한다면 A와 B는 아무런 차이가 없다. 하지만, v가 비어 있는 경우 B라인은 std::out_of_range 예외를 던져주지만, A의 경우 미정의 결과(컴..
[Exceptional C++ Style] 7. 함수 템플릿을 특수화하지 말아야 하는 이유 이 챕터는 함수 템플릿 오버로드와 특수화에 대해 이야기하고 있다. 제목에서 함수 템플릿을 특수화하지 말라고 하는데, 이는 함수 템플릿 특수화의 낮은 직관성에 기인한다. 일반 함수 - 함수 템플릿 - 함수 템플릿 오버로드 - 함수 템플릿 특수화의 차이와 인스턴스화가 발생하는 우선 순위에 대해 짚고 넘어갈 수 있는 챕터이다. 신참 질문 C++에 존재하는 템플릿의 두 종류는 무엇이며, 각각 어떻게 특수화되는가? C++ 템플릿은 다음 두 가지 종류가 있다. 함수 템플릿 클래스 템플릿 이 두 종류의 템플릿은 정확히 동일한 방식으로는 동작하지 않는데, 가장 명백한 차이는 역시 오버로드의 유무이다. 보통의 C++ 클래스와 마찬가지로 클래스 템플릿 역시 오버로드를 할 수 없다. 역시 C++ 함수와 마찬가지로 함수 템플..