C++가 새로운 언어로 느껴지곤 한다. 오늘날의 C++를 이용하면 C++98을 사용하던 때보다 아이디어를 더 명확하고 단순하며 직접적으로 표현할 수 있다. 그리고 이렇게 만들어진 프로그램은 컴파일러가 더 엄격하게 검사하며, 더 빠르게 실행된다. 이 책에서는 C++17에서 정의하는 C++의 개요를 다룬다. C++17은 현재 ISO C++표준으로서 주요 C++ 제공 기업들이 이를 구현하고 있다. 더 나아가 이 책은 콘셉트(concept)와 모듈(module)에 대한 내용을 포함한다. 이에 대한 기법은 ISO 기술 명세에서 다루고 있으며 요즘도 사용되고 있지만, C++20이 릴리스될 때까지 표준에는 포함되지 않을 계획이다.
다른 현대적인 언어와 마찬가지로 C++는 방대한 언어이고, 효과적으로 사용하려면 많은 라이브러리가 필요하다. 따라서 이 책에서는 경험 있는 프로그래머에게 현대적인 C++가 무엇으로 이뤄지는지에 대한 아이디어를 제공하고자 한다. 언어의 중요 기능과 표준 라이브러리의 주요 구성 요소를 설명한다. 몇 시간 안에 이 책을 읽을 수는 있지만, 좋은 C++ 프로그램을 작성하는 요령은 하루아침에 배울 수 없다. 다시 말해, 이 책의 목표는 C++를 마스터하는 것이 아니라, 전체적인 개요와 핵심 예제를 제공함으로써 프로그래머의 시작을 돕는 것이다.
여기서는 독자가 예전에 프로그래밍을 해봤다고 가정하고 진행한다. 그렇지 않다면 먼저『Programming: Principles and Practice Using C++ (Second Edition) 한국어판』(에이콘, 2015)을 비롯한 교과서를 읽기를 권한다. 여러분이 프로그래밍을 해봤다고 하더라도 여기서 다룰 C++의 스타일이 예전에 사용했던 언어와는 매우 다를 수 있다.
코펜하겐이나 뉴욕 같은 도시를 여행한다고 하자. 몇 시간의 관광으로 할 수 있는 일은 주요 관광지 몇 곳에 들러 그 배경에 대한 짧은 이야기를 듣고, 다음에 뭘 해야 할지에 대한 제안을 받는 정도다. 그런 관광 한 번으로는 도시를 제대로 알 수는 없다. 보고 들은 모든 것을 이해할 수도 없고, 도시의 일상을 지배하는 공식적으로나 비공식적인 규칙을 어떻게 알아가야 하는지에 대한 감을 잡을 수도 없다. 한 도시를 알려면 보통 몇 년은 살아야 한다. 그러나 약간의 행운이 따른다면 관광을 하면서 전체적인 개요를 얻고, 그 도시의 무엇이 특별한지, 여러분의 흥미를 끌 만한 것이 무엇인지를 알 수는 있다. 이 짧은 여행의 끝이 진짜 탐험의 시작이 될 수 있다.
이번 여행에서는 객체지향이나 제네릭 프로그래밍 같은 프로그래밍 스타일을 뒷받침하는 C++ 언어의 주요 기능을 살펴본다. 자세한 내용이나 참고용 매뉴얼, 언어의 모든 기능마다 설명을 제공하지는 않는다. 교과서의 관례를 따르자면 어떤 기능을 사용하기 전에 그에 대한 설명을 하겠지만, 그런 일이 항상 가능하지는 않고 모든 사람이 책을 순서대로 읽지도 않는다. 따라서 독자는 목차의 참조를 활용하기 바란다.
마찬가지로 표준 라이브러리를 완벽하게 설명하기보다는 주로 예제를 살펴본다. ISO 표준을 벗어나는 라이브러리는 설명하지 않으니 필요한 보충 자료는 직접 찾아보기 바란다. 『The C++ Programming Language (Fourth Edition) 한국어판』(에이콘, 2015)과 (www.stroustrup.com/applications.html)는 물론이고 웹에서 많은 자료를 얻을 수 있다. 예를 들어 이 책에서 설명하는 표준 라이브러리 함수나 클래스의 정의는 쉽게 찾아볼 수 있고, 문서를 읽어보면 관련된 많은 기능을 찾아볼 수 있다.
이번 여행에서는 층층이 나눠진 케이크가 아니라, 통합된 전체로서의 C++를 다룬다. 따라서 언어의 어떤 기능이 C나 C++98에서 유래됐는지, 혹은 C++11이나 C++14, C++17에서 새로 도입됐는지를 밝히지는 않는다. 이에 대한 내용은 16장에서 간략히 볼 수 있다.
여기서는 기본에 집중하고 명료함을 유지하고자 한다. 그러나 새로운 기능을 자랑하고 싶은 충동을 완전히 억제할 수는 없었다. 이 또한 예전 버전의 C++를 알고 있는 독자에게는 호기심을 채울 좋은 기회가 되리라 믿는다.
프로그래밍 언어의 참고 매뉴얼이나 표준 문서는 그 언어로 무엇을 할 수 있는지만을 다룬다. 하지만 프로그래머는 그 언어를 잘 활용하는 방법을 알고 싶어 한다. 활용법에 대한 관점은 본문과 조언 절에서 부분적으로 담고 있어, 활용법에 대해서도 배울 수 있을 것이다.
C++가 완전히 달라졌다. C++98이나 C++11에 비해 아이디어를 더 명쾌하고 간단하게 그리고 직관적으로 구현해낼 수 있게 됐다. 컴파일러도 더 빠르고 더 정확하게 결과 프로그램을 생성해낸다.
이 책은 현재 ISO C++ 표준인 C++20 정의를 기준으로 삼아 C++ 주요 공급자가 구현한 C++를 전반적으로 살펴본다. 또한 C++23까지 표준으로 채택될 예정은 없으나 빈번하게 쓰는 라이브러리 컴포넌트도 소개한다.
다른 최신 언어와 마찬가지로 C++ 역시 규모가 매우 크므로 효과적으로 사용하기 위해서는 아주 다양한 라이브러리가 필요하다. 이 얇은 책은 이미 C++에 익숙한 프로그래머가 모던 C++ 구성 요소를 배우기에 알맞다. 주요 언어 기능을 대부분 소개하며 주요 표준 라이브러리 컴포넌트도 다룬다. 하루 이틀이면 읽겠으나 훌륭한 C++ 코드를 작성하기에는 턱없이 부족하다. 완벽하게 설명하기보다는 개략적인 내용과 꼭 필요한 예제만을 제공해 프로그래머에게 시작점을 제공하고자 한다.
이 책은 프로그래밍 경험이 충분하다고 가정한다. 아니라면 『Programming: Principles and Practice Using C++, Second edition 한국어판』(에이콘, 2015) 같은 책부터 읽어보기 바란다. 프로그래밍 경험이 있더라도 사용했던 언어나 개발했던 애플리케이션이 이 책에서 소개할 C++ 방식과 상당히 다를 수 있다.
코펜하겐이나 뉴욕 같은 도시를 관광한다고 해보자. 단체 여행이라면 단 몇 시간 만에 도시의 주요 관광지를 돌아다니며 뒷이야기를 들은 후 다음 장소까지 추천받는다. 이렇게 돌아다녀서는 그 도시에 대해 전혀 알 수 없다. 보고 들은 것이 오롯이 내 것이 되지 않는다.
어떤 이야기는 너무 기이해서 아예 믿어지지도 않는다. 그 도시의 삶을 지배하는 형식적 규칙과 비형식적 규칙을 도무지 알 도리가 없다. 제대로 알려면 몇 년은 살아야 한다. 하지만 약간의 운이 따라 준다면 전체적인 설명을 간략하게 듣게 될지도 모른다. 그럼 그 도시의 무엇이 특별한지, 어떤 부분이 흥미로운지 알게 된다. 이렇게 투어를 마치면 그제서야 진정한 탐험이 시작된다.
이 책에서 제공할 투어는 객체지향과 제네릭 프로그래밍 같은 프로그래밍 스타일을 지원하는 C++ 언어 기능을 소개한다. 언어 기능마다 매번 자세한 참조 매뉴얼을 제공하진 않는다. 훌륭한 교재가 늘 그러하듯이 되도록이면 기능을 사용하기 전에 설명부터 하겠지만 간혹 불가능할 수 있고 모든 독자가 책을 순차적으로 읽지도 않는다. 독자가 어느 정도 기술적 숙련도를 갖췄다고 가정하겠다. 그러니 필요할 때마다 교차 참조나 색인을 활용하기 바란다.
같은 맥락에서 이 투어는 철저한 설명 대신 예제 관점에서 표준 라이브러리를 설명한다. 필요하다면 자료를 추가로 찾아보자. ISO 표준에서 제공하는 기능은 C++ 에코시스템의 극히 일부다(예를 들어 라이브러리, 빌드 시스템, 분석 도구, 개발 환경 등). (품질은 제각각이지만) 온라인상에는 수많은 자료가 존재한다. CppCon이나 Meeting C++ 같은 콘퍼런스에서 어렵지 않게 유용한 튜토리얼과 소개 동영상을 찾을 수 있다. ISO C++ 표준에서 제공하는 언어와 라이브러리를 기술적으로 자세히 살피려면 Cppreference를 읽어보자. 표준 라이브러리 함수나 클래스가 나올 때 정의를 찾아보기 쉽고, 설명서를 읽다 보면 관련 기능이 많이 나온다.
이 투어는 C++를 층층이 쌓인 케이크 대신 통합된 전체로 바라본다. 그래서 C나 C++98, 혹은 그 이후의 ISO 표준에 소개된 언어 기능은 거의 다루지 않는다. 이러한 정보는 19장에 나온다(역사적 배경과 호환성). 목표는 최대한 기초에 집중하면서 간략하게 설명하는 것이지만 모듈(3.2.2절), 콘셉트(8.2절), 코루틴(18.6절) 같은 새로운 기능을 신나게 소개하고 싶은 유혹을 완전히 떨치지는 못했다. 최신 개발 방식을 따르려는 시도 역시 과거의 C++ 버전에 익숙한 많은 독자의 호기심을 충족시킬 것이다.
프로그래밍(programming)은 주어진 문제의 해법을 컴퓨터가 실행할 수 있는 형태로 표현하는 기술이다. 프로그래밍에서 가장 공들여야 할 부분이 바로 그 해답을 찾고 가다듬는 일이며, 이 해답을 프로그래밍하는 과정에서 문제를 더 명확히 이해할 수 있다.
이 책은 예전에 한 번도 프로그래밍을 해본 적이 없지만 프로그래밍을 열심히 배우려는 의지가 있는 사람을 위한 책으로, C++ 프로그래밍 언어를 이용해서 프로그래밍의 이론과 실전 기술을 이해할 수 있게 만들었다. 나는 여러분이 최신 기술을 이용해서 간단하고 실용적인 프로그래밍을 하는 데 충분한 지식과 경험을 얻을 수 있길 바란다. 그렇다면 그러한 목적을 달성하는 데 얼마나 많은 시간이 필요할까? (보통 난이도의 수업을 네 개 정도 수강한다면) 대학교 1학년 과정에서 한 학기 동안 진행하면 적당하다. 혼자 공부한다면 그보다는 오래 걸린다(아마도 14주 동안 매주 15시간 정도 학습).
석 달이란 시간이 짧지는 않지만 배워야 할 것이 많으며, 지금으로부터 한 시간쯤 후에는 첫 번째 프로그램을 간단히 작성해본다. 그리고 모든 학습은 점진적으로 진행한다. 각 장에서는 새롭고 유용한 개념을 소개하고, 실전에서 쓸 만한 예제를 바탕으로 개념을 설명한다. 학습을 진행하다 보면 컴퓨터가 여러분이 원하는 일을 수행할 수 있게 아이디어를 코드(code)로 표현하는 능력이 점차 향상될 것이다. 나는 절대로 ‘한 달 동안 이론을 공부한 후에 여러분이 이론을 활용할 수 있는지 시험’해보는 방식으로 가르치지 않는다.
이쯤에서 궁금한 점이 있다. 여러분은 왜 프로그래밍을 배우려 하는가? 우리의 문명은 소프트웨어(software)를 기반으로 유지된다. 소프트웨어를 이해하지 못하면 여러분은 ‘마법’을 믿는 수준에서 벗어날 수 없고, 가장 흥미롭고 유익하고 사회적으로 유용한 기술 분야를 접할 수도 없다. 그래서 나는 프로그래밍에 대해 말할 때 매우 광범위한 분야를 논한다. 그래픽 사용자 인터페이스(GUI, Graphical User Interfaces)를 탑재한 개인용 컴퓨터에서부터 공학적인 수치 계산, (디지털 카메라와 자동차, 휴대폰 등에 들어가는) 임베디드 시스템(embedded system) 제어 응용 프로그램, 텍스트 편집기에 이르기까지 인간 생활의 많은 부분과 사업적인 응용 분야에서 그 예를 볼 수 있다. 그리고 수학과 마찬가지로 프로그래밍도 잘 갈고 닦으면 인간의 사고력 배양에 도움을 주는 값진 지적 활동이 될 수 있다. 다행히도 프로그래밍은 컴퓨터가 주는 피드백(feedback) 덕분에 대부분의 수학보다 손에 잡히는 무언가로서, 더 많은 사람이 수학보다 쉽게 접근할 수 있다. 여러분은 프로그래밍을 바탕으로 세상의 경계를 넓히고, 바라건대 더 좋은 방향으로 세상을 변화시킬 수 있다. 마지막 이유를 들자면 프로그래밍은 매우 즐거운 일이기도 하다.
그렇다면 왜 C++인가? 프로그래밍 언어 없이는 프로그래밍을 배울 수 없고, C++는 실세계의 소프트웨어에서 활용하는 주요 개념과 기법을 모두 지원하기 때문이다. 그리고 C++는 가장 널리 쓰이는 프로그래밍 언어 중의 하나로, 거의 모든 분야에서 활용하고 있다. 깊은 바다 밑바닥부터 화성 표면에 이르기까지, 어디서나 C++ 응용 프로그램을 찾아볼 수 있다. C++는 비영리 국제 표준화 단체에서 정교하고 포괄적으로 정의됐고, 어떤 종류의 컴퓨터에서나 그 종류에 맞는 고품질의 무료 구현체(implementations)를 구할 수 있다. C++로 배우는 대부분의 프로그래밍 개념은 C와 C#, 포트란(Fortran), 자바(Java) 등의 언어에서도 적용할 수 있다. 마지막 이유는 내가 우아하고 효율적인 코드를 작성할 때 가장 선호하는 언어가 바로 C++이기 때문이다.
하지만 이 책이 가장 쉬운 프로그래밍 입문서가 아니라는 점을 알아두자. 애초에 그렇게 만들 생각도 없었다. 나는 여러분이 실전 프로그래밍의 기본을 다질 수 있기를 바랄 뿐이다. 근래의 소프트웨어는 불과 몇 년 전에 나온 신기술을 바탕으로 한다는 점에서 그마저도 쉬운 목표는 아니다.
나는 기본적으로 여러분의 목적이 프로 정신을 바탕으로 책임감 있게 다른 사람들에게 유용한 고품질의 시스템을 만드는 데 있다고 가정한다. 따라서 나는 가르치고 배우기 쉬운 주제보다 실전 프로그래밍을 시작하는 데 필요한 주제를 다룬다. 이러한 주제를 다룰 때는 먼저 그 주제에 대해 설명하고, 개념을 예시하고, 해당 기술을 구현할 때 필요한 언어의 기능을 살펴본 후 제공된 연습문제를 푸는 순서로 진행한다. 여러분이 그저 장난감 프로그램을 이해하는 정도에서 만족한다면 내가 전달하려고 하는 내용보다 훨씬 적은 지식만 습득하게 된다. 그렇다고 해서 별로 실용성 없는 내용으로 여러분의 시간을 빼앗지는 않겠다. 이 책에서 어떤 주제를 다룬다면 그 주제가 여러분에게 필요하기 때문이다.
하지만 여러분이 다른 사람의 코드를 제대로 이해하지 않고 그대로 가져다 쓰거나, 스스로 많은 코드를 추가할 생각이 없다면 굳이 이 책을 볼 필요는 없다. 그렇다면 다른 책을 보거나 다른 언어를 사용하라. 여러분이 생각하는 프로그래밍이 그런 것이라면 왜 그런 생각을 하게 됐고, 그런 생각이 여러분의 필요를 충족할 수 있는지 다시 한 번 생각해보자. 사람들은 프로그래밍의 가치와 복잡성을 과소평가하는 경향이 있다. 물론 내가 설명하는 측면의 소프트웨어와 여러분이 필요한 것의 괴리로 인해 여러분이 프로그래밍을 싫어하지는 말았으면 한다. 정보 기술(Information technology)의 세계에는 프로그래밍 지식을 요구하지 않는 분야도 많다. 이 책은 단지 제대로 된 프로그램을 만들거나 분석하고 싶은 사람들을 위한 책이다.
이 책의 구성과 실용적인 목적으로 보자면 이미 C++를 조금 알고 있는 사람이나 다른 언어를 알고 있는 상태에서 C++를 배우려는 사람이 참고서로 사용할 수도 있다. 여러분이 이 두 가지 경우 중 하나에 속한다면 책을 다 읽는 데 얼마나 시간이 걸릴지는 모르겠지만 되도록 많은 연습문제를 풀기 바란다. 이를 바탕으로 오래되고 익숙한 스타일로 프로그래밍할 때 생기는 일반적인 문제를 더 적합한 최신 기술로 해결할 수 있다. 지금까지 예전 방식으로 C++를 배웠다면 7장에 다다르기 전에 놀랍고 유용한 무언가를 발견할 것이다. 여러분의 이름이 스트롭스트룹이 아닌 이상, 여기서 설명하는 C++는 여러분이 알고 있던 C++가 아닐 테니까.
프로그래밍을 배우려면 프로그램을 직접 작성해야 한다. 이런 점에서 프로그래밍은 실용적인 요소를 포함한 종목과 비슷하다. 예를 들어 수영과 악기 연주, 자동차 운전은 연습을 하지 않고 책만 읽어서는 배울 수 없다. 마찬가지로 많은 코드를 직접 읽고 작성하지 않으면 프로그래밍을 배울 수 없다. 따라서 이 책에서는 설명하는 내용이나 도식과 밀접하게 관련된 예제 코드를 중점적으로 다룬다. 이를 바탕으로 프로그래밍의 이상과 개념, 이론을 이해하고 이를 표현하는 데 필요한 언어적 구성 요소를 익힌다. 하지만 이러한 이해가 필수적이라고해도 그것만으로는 실용적인 프로그래밍 기술을 얻을 수 없다. 즉, 연습문제를 풀어봄으로써 코드를 작성하고 컴파일(compile)하고 실행하는 도구에 익숙해져야 한다. 프로그래밍 학습에 있어 코드 작성 말고는 도리가 없다. 게다가 코딩은 즐거운 일이잖은가!
물론 코딩이 프로그래밍의 전부는 아니다. 프로그래밍은 몇 가지 규칙을 따르고 매뉴얼을 읽는 일보다 훨씬 많은 일을 포함한다. 단언컨대 이 책은 C++ 문법에 국한되지 않는다. 프로그래밍의 기본적인 이상과 이론, 기술에 대한 이해가 좋은 프로그래머(programmer)의 자질이기 때문이다. 이런 프로그래머가 잘 설계된 코드를 작성하지 않으면 정확하고 견고하고 관리하기 쉬운 시스템(system)은 있을 수 없다. 그리고 이런 기본이야 말로 영원한 법이다. 오늘날 사용하는 언어와 도구가 진화하거나 대체돼도 기본은 여전히 기본이다.
그렇다면 컴퓨터 과학(computer science)과 소프트웨어 공학(software engineering), 정보 기술은 무엇일까? 모두 다 프로그래밍을 말하는가? 물론 아니다. 프로그래밍은 컴퓨터에 관련된 모든 분야의 기저에 깔린 기초적인 주제이며, 균형 잡힌 컴퓨터 과학 학습 과정의 일부다. 앞으로 알고리즘(algorithm)과 자료 구조(data structure), 사용자 인터페이스(user interface), 데이터 처리, 소프트웨어 공학의 주요 개념과 기술을 설명하겠지만, 이 책이 각 분야의 철저하고 균형잡힌 학습을 대체할 수는 없다.
코드는 아름답고 유용해질 수 있다. 이 책의 목적은 여러분이 그러한 사실을 실감하게하는 데 있다. 코드가 아름답다는 말의 의미를 깨닫고, 아름다운 코드를 만드는 데 필요한 이론과 실전 기술을 익히는 데 있다. 여러분의 프로그래밍에 행운이 함께 하기를!
C++는 새로운 언어처럼 느껴진다. 즉, C++11에서는 C++98에서보다 자신의 생각을 좀 더 명료하고, 좀 더 간단하며, 좀 더 직접적으로 표현할 수 있다. 게다가 결과로 만들어지는 프로그램은 컴파일러에서 더 잘 체크되며 더 빠르게 실행된다.
이 책은 완결성에 목적을 둔다. 이 책은 현업 프로그래머에게 필요한 모든 언어 기능과 표준 라이브러리 구성 요소를 설명한다. 각각에 대해 다음과 같은 내용이 제공된다.
■ 논리적 근거: 그것은 어떤 종류의 문제를 해결하는 데 도움을 주려고 설계됐는가? 설계의 바탕이 되는 원리는 무엇인가? 근본적인 한계는 무엇인가?
■ 명세: 그것의 정의는 무엇인가? 세부 사항의 수준은 전문 프로그래머를 대상으로 선택됐다. 열렬한 언어 탐구자라면 ISO 표준에 대한 수많은 참고 내용들을 따라갈 수 있다.
■ 예제: 그것은 어떻게 자체적으로 또는 다른 기능들과 조합돼 사용될 수 있는가? 핵심 기법과 표현 방식은 무엇인가? 유지 보수성과 성능에 대해서는 어떤 영향을 미치는가?
C++의 사용은 지난 몇 년간 급격한 변화를 겪었으며, 언어 자체 역시 마찬가지다. 프로그래머의 입장에서 보면 대부분의 변화는 더 나아진 것이었다. 현재의 ISO 표준(ISO/IEC 14882-2011, 보통 C++11이라고 불림)은 양질의 소프트웨어를 작성하는 데 있어 이전 버전에 비해 훨씬 나은 도구다. C++11은 어떻게 더 나은 도구인가? 최신 C++는 어떤 종류의 프로그래밍과 기법을 지원하는가? 깔끔하고, 정확하며, 유지보수에 용이하고, 효율적인 C++ 코드의 기본 구성 요소는 무엇인가? 이런 것들이 이 책에서 해답을 제시하려는 주요한 질문들이다. 많은 해답이 1985년, 1995년, 2005년의 구식 C++에서 찾을 수 있는 답과 달라졌다. 진보가 일어난 것이다.
C++는 풍부한 타입과 가벼운 추상화를 설계하고 활용하는 데 역점을 두는 범용 프로그래밍 언어다. C++는 소프트웨어 하부 구조에서 발견되는 자원적 제약이 있는 애플리케이션에 특히 적합하다. C++는 양질의 코드 작성에 필요한 기법에 숙달되기 위해 시간을 투자하는 프로그래머에게 보답한다. C++는 프로그래밍 작업을 진지하게 고려하는 이들을 위한 언어다. 우리의 문명은 소프트웨어에 절대적으로 의존한다. 그런 소프트웨어는 양질이어야 한다.
배포된 C++ 코드는 수십억 줄에 달한다. 이로 인해 안정성이 특히 중요시돼 1985년과 1995년의 C++ 코드가 아직까지 동작하고, 앞으로 수십 년 동안 계속 동작하게 될 것이다. 하지만 모든 애플리케이션에 대해 최신 C++로 더 나은 결과를 얻을 수 있다. 오래된 스타일을 고수한다면 낮은 품질에 낮은 성능을 보이는 코드를 작성할 수밖에 없다. 안정성에 대한 강조는 오늘 작성한 표준 준수 코드가 지금으로부터 20년 후에도 여전히 동작할 것이라는 뜻이다. 이 책의 모든 코드는 2011 ISO C++ 표준을 준수한다.
C++98에 비해 C++11에서 추가된 기능은 무엇인가? 상당한 병행성을 갖춘 현대적 컴퓨터에 적합한 기계 모델, 시스템 레벨의 병행성 프로그래밍을 수행하기 위한 언어 및 표준 라이브러리 기능(예를 들면 멀티코어를 활용한), 정규 표현식 처리, 자원 관리 포인터, 난수, 개선된 컨테이너(해시 테이블을 비롯한) 등이고, 범용적이고 통일적인 초기화, 더 간단해진 for문, 이동 의미 구조, 기초적인 유니코드 지원, 람다, 일반 상수 표현식, 클래스 기본 값에 대한 제어, 가변 인자 템플릿, 사용자 정의 리터럴 등이다. 이런 라이브러리와 언어 기능은 양질의 소프트웨어 개발에 필요한 프로그래밍 기법을 지원하기 위해 존재한다는 점을 기억하기 바란다. 이런 기능들은 건물의 벽돌처럼 함께 사용되도록 의도된 것이지, 특정 문제를 해결하기 위해 고립돼 개별적으로 사용되도록 의도된 것이 아니다. 컴퓨터는 범용 기기이며, C++는 이러한 능력을 통해 그런 목적을 만족시킨다. 특히 C++의 설계 목표는 설계자들이 생각지도 못한 미래의 문제들에 대응할 수 있게끔 충분히 융통성 있고 범용적이 되는 것이다.