Введение
Перед вами учебник по основам языка C++. При его создании мы вдохновлялись специализацией «Искусство разработки на современном C++» на «Курсере», созданной при поддержке Яндекса, и курсом «Основы и методология программирования», который читался в 2014–2021 годах на факультете компьютерных наук ВШЭ.
Языку C++ почти 40 лет, но он по-прежнему очень актуален и востребован. Он оказал огромное влияние на индустрию и на другие языки. C++ был разработан Бьярне Страуструпом в начале 1980-х годов как расширение языка C (и даже изначально назывался «Си с классами»).
Однако для изучения C++ совсем не обязательно знать C. Тем не менее мы предполагаем, что вы знакомы с основами информатики и владеете каким-либо языком программирования на уровне школьной программы — например, языком Python.
Впрочем, C++ во многом полностью противоположен Python:
- это компилируемый, а не интерпретируемый язык;
- С++ — язык со статической, а не динамической типизацией;
- в C++ возможно ручное управление памятью (в отличие от автоматической сборки мусора).
Чтобы исходный код программы на C++ превратился в исполняемый файл для конкретной архитектуры процессора, программу нужно скомпилировать. Существует несколько популярных компиляторов C++:
- GNU Compiler Collection (GCC);
- Clang — построен поверх инфраструктуры LLVM;
- Microsoft Visual C++ (MSVC) — входит в состав Microsoft Visual Studio;
- Intel C++ Compiler.
Мы будем использовать в примерах и при проверке задач компилятор Clang 16-й версии.
При проверке задач мы используем следующие ключи компилятора:
clang++ --std=c++20 -O3 -fsanitize=address,undefined -Wall -Wextra -Werror
С 1998 года международный комитет по стандартизации C++ выпускает стандарты — версии языка, в которых описываются его возможности. В первую очередь это руководства для создателей компиляторов, но при возникновении спорных моментов всегда полезно обратиться к стандарту. Мы будем ориентироваться на стандарт C++20, а по ссылке можно ознакомиться с черновиком будущего стандарта. Важно понимать, что стандарт определяет лишь общие требования и не фиксирует детали реализации, которые в разных компиляторах могут отличаться.
Чтобы проверить, поддерживает ли ваша версия компилятора ту или иную особенность C++, советуем пользоваться специальной таблицей.
При изучении вам будут полезны следующие англоязычные ресурсы:
- cppreference.com — онлайн-документация по C++;
- isocpp.org — сайт Standard C++ Foundation;
- C++ Core Guidelines — гайдлайны по C++ от Бьярне Страуструпа и Герба Саттера;
- godbolt.org — Compiler Explorer, онлайн-компилятор;
- learncpp.com — современный учебник по C++;
- hacking C++ — наглядный справочник по C++ с картинками и инфографикой.
В тексте мы будем часто ссылаться на англоязычную версию cppreference.com и на английскую «Википедию».
Написать программу для C++ можно в любом текстовом редакторе, но удобнее пользоваться средой разработки (IDE). IDE включают редактор кода с подсветкой синтаксиса, а также позволяют компилировать, запускать и отлаживать программы.
Примеры IDE:
Мы рассчитываем, что вы сможете самостоятельно разобраться с настройкой и использованием среды разработки, и не будем заострять на этом внимание. В наших примерах мы будем запускать компилятор из консоли.
К нашему учебнику прилагается набор задач по соответствующим темам. Вы можете сдавать их в автоматическую проверяющую систему. В одних задачах требуется написать полноценную программу, а в других — сдать только код функции или класса. Обратите внимание, что ко всем задачам имеются разборы с авторскими решениями. Найти разборы вы можете в конце глав.
Ho прежде чем мы двинемся дальше — небольшое объявление: для этого хендбука у нас есть коммьюнити студентов. В нём можно найти единомышленников, обсудить материалы и задания. Вступить в него можно по ссылке. А чтобы быть в курсе обновлений хендбука — советуем подписаться на рассылку.