처음에는 객체지향 기능이 추가된 C에서 시작
현재 절차형, 객체 지향형, 함수형, 제네릭, 메타 프로그래밍까지 지원
- 제네릭 프로그래밍: 데이터 형식에 구애받지 않도록, 하나의 값이 다양한 데이터 타입을 가질 수 있는 방향으로 재사용성을 극대화하는 프로그래밍 패러다임
- 메타 프로그래밍: 자기 자신 혹은 다른 프로그램을 데이터로 취급하며 프로그램을 작성, 수정하는 것, 런타임에 수행해야 하는 작업의 일부를 컴파일 타임 동안 수행하는 방식을 말하기도 함
C++을 단일 언어가 아닌 언어의 연합으로 볼 필요가 있으며 각각의 룰에 맞춰줄 필요가 있다.
위 하위 언어들 간의 전환이 발생한다면 전략을 변경하는 상황을 직면할 수 있다.
단일 규칙이 아닌 각기 고유 규칙을 보유한 하위 언어의 집합체라는 것을 이해한다면 C++이 더욱 알기 쉬울 것