C++ в одном предложении
C++ - это статически типизированный компилируемый язык программирования, который превращает ваш исходный код прямо в нативный машинный код. Именно это единственное проектное решение - никакого интерпретатора, никакой виртуальной машины между вашей программой и процессором - делает C++ одним из самых быстрых языков, на которых вы можете писать, и причиной того, что он движет ПО, которое категорически не может быть медленным.
Вот обязательная первая программа. Запустите её прямо здесь:
Здесь больше структуры, чем в скриптовом языке, и это сделано намеренно - C++ даёт вам точный контроль в обмен на явность. Мы разберём каждую часть этого на следующих нескольких страницах.
Почему C++ быстрый
Большинство скриптовых языков выполняют ваш код через интерпретатор или виртуальную машину, которые читают и исполняют инструкции во время выполнения. C++ пропускает всё это:
- Компилятор (такой как
g++илиclang++) читает ваш исходник.cppи переводит его в машинные инструкции для конкретного процессора и операционной системы. - Результат - автономный исполняемый файл, который процессор запускает напрямую: ничто не стоит между вашим кодом и железом.
Поскольку во время работы программы не происходит никакого перевода, программы на C++ запускаются мгновенно и работают на полной скорости процессора. Вы также получаете тонкий контроль над памятью и железом, который более высокоуровневые языки намеренно от вас скрывают.
Компромисс: этот машинный код собран под одну платформу. Исполняемый файл, скомпилированный в Windows, не запустится на Mac - вы перекомпилируете исходник под каждую цель. (Сравните с Java, которая компилируется в переносимый байт-код, работающий на любой JVM.)
Статическая типизация и многопарадигменность
Два свойства определяют, как выглядит и ощущается код на C++.
Статическая типизация означает, что каждая переменная имеет тип, известный во время компиляции, и компилятор проверяет ваши типы ещё до того, как программа запустится:
count остаётся int всю свою жизнь; попытка сохранить в нём "hello" не скомпилировалась бы. Это перехватывает целый класс ошибок на раннем этапе ценой большего объёма набора текста в начале.
Многопарадигменность означает, что C++ не навязывает вам единственный стиль. Вы можете писать простой процедурный код, организовывать логику в классы (объектно-ориентированный подход) или использовать шаблоны для обобщённого, переиспользуемого кода. Большинство реальных программ смешивают все три подхода. Эта гибкость мощна, но также означает, что у C++ большая площадь для изучения - мы будем осваивать её по одному понятию за раз.
Для чего используется C++
C++ встречается везде, где производительность и контроль не подлежат обсуждению:
- Игровые движки - Unreal Engine, ядро Unity и большая часть кода AAA-игр.
- Системное ПО - операционные системы, драйверы устройств и браузеры вроде Chrome и Firefox.
- Высокопроизводительные сервисы - базы данных, торговые системы и поисковая инфраструктура, где на счету микросекунды.
- Встраиваемые системы и железо - прошивки для автомобилей, дронов, медицинских устройств и IoT.
Если ПО должно быть быстрым, помещаться в ограниченную память или напрямую общаться с железом, велики шансы, что оно написано на C++.
C++ - это не C (но всё началось там)
C++ вырос из C в 1980-х как «C с классами» и по большей части остаётся надмножеством - много корректного кода на C компилируется как C++. Но с тех пор язык вырос колоссально.
C++ добавляет объектно-ориентированное программирование, шаблоны для обобщённого кода, ссылки, исключения и богатую стандартную библиотеку, полную готовых инструментов. В этом фрагменте используется один из них, vector - массив с изменяемым размером, который управляет собственной памятью, то, что в C вам пришлось бы делать вручную:
Современный C++ (стандарты C++11, C++17 и C++20) сильно опирается на подобные инструменты, чтобы сделать язык безопаснее и выразительнее, чем его корни в C. Распространённая ошибка новичков - писать C++ в стиле C: ручное управление памятью, голые массивы повсюду, - когда стандартная библиотека уже решает задачу за вас. На протяжении всей этой документации мы будем отдавать предпочтение современному стилю.
Далее: установка C++
Чтобы писать и запускать C++ на собственной машине, вам нужен компилятор - обычно g++ (часть GCC), clang++ или набор инструментов MSVC в Windows. На следующей странице описана установка одного из них и проверка того, что он работает из вашего терминала.
Часто задаваемые вопросы
Для чего используется C++?
C++ движет ПО, где важны скорость и контроль: игровые движки (Unreal, ядро Unity), операционные системы, браузеры (Chrome, Firefox), базы данных, торговые системы и встраиваемые устройства. Его сила в том, что он работает близко к железу, но при этом предлагает высокоуровневые возможности вроде классов, шаблонов и стандартной библиотеки.
C++ компилируемый или интерпретируемый?
C++ компилируемый. Компилятор, такой как g++ или clang++, переводит ваш исходный код напрямую в нативный машинный код для конкретного процессора и операционной системы, создавая автономный исполняемый файл. Между вашей программой и процессором нет ни интерпретатора, ни виртуальной машины - именно поэтому C++ так быстр.
В чём разница между C и C++?
C++ начинался как «C с классами» и по большей части является надмножеством C, поэтому большинство кода на C компилируется как C++. Главные добавления - объектно-ориентированное программирование (классы и наследование), шаблоны, стандартная библиотека (контейнеры вроде vector и map), ссылки, исключения и множество средств безопасности и удобства, которых нет в C.