template 2

C++를 언어들의 연합체로 바라보는 안목

초창기의 C++ C언어에 객체 지향 기능 몇 가지가 결합된 형태 오늘날의 C++ 다중패러다임 프로그래밍 언어 절차적 프로그래밍을 기본으로 한다. 객체지향 프로그래밍 함수식 프로그래밍 일반화 프로그래밍 메타 프로그래밍 C++를 단일 언어로 바라보는 눈을 넓혀 상관 관계가 있는 여러 언어들의 연합체로 본다. C++의 하위 언어 C C++는 C를 기본으로 한다. 블록, 문장, 선행 처리자, 기본제공 데이터타입, 배열, 포인터 객체 지향 개념의 C++ 클래스를 쓰는 C 클래스, 캡슐화, 상속, 다형성, 가상 함수(동적 바인딩) 템플릿 C++ C++의 일반화 프로그래밍 부분 새로운 프로그래밍 패러다임인 템플릿 메타프로그래밍이 파생 STL 템플릿 라이브러리 컨테이너, 반복자, 알고리즘, 함수 객체

템플릿 형식 연역 규칙

템플릿 형식 연역 template void f(ParamType param); f(expr); 컴파일러는 expr을 이용해서 두 가지 형식을 연역한다. T ParamType 두 형식이 다른 경우가 많다. template void f(const T& param); int x = 0; f(x); T는 int로 연역되나 ParamType은 const int&로 연역된다. T에 대해 연역된 형식이 함수에 전달된 인수의 형식과 항상 같지는 않다. T에 대해 연역된 형식은 expr의 형식, ParamType의 형태에 의존한다. 형태에 따라 세가지 경우로 나뉜다. 경우 1: ParamType이 포인터 또는 참조 형식이지만 보편 참조는 아닐 경우 형식 연역 과정 expr이 참조 형식이면 참조 부분을 무시한다. expr..