Menu

Что такое C++? Язык, его скорость и где он работает

Что такое C++ на самом деле, почему он компилируется прямо в нативный машинный код и какое высокопроизводительное ПО на нём пишут.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

C++ в одном предложении

C++ - это статически типизированный компилируемый язык программирования, который превращает ваш исходный код прямо в нативный машинный код. Именно это единственное проектное решение - никакого интерпретатора, никакой виртуальной машины между вашей программой и процессором - делает C++ одним из самых быстрых языков, на которых вы можете писать, и причиной того, что он движет ПО, которое категорически не может быть медленным.

Вот обязательная первая программа. Запустите её прямо здесь:

Здесь больше структуры, чем в скриптовом языке, и это сделано намеренно - C++ даёт вам точный контроль в обмен на явность. Мы разберём каждую часть этого на следующих нескольких страницах.

Почему C++ быстрый

Большинство скриптовых языков выполняют ваш код через интерпретатор или виртуальную машину, которые читают и исполняют инструкции во время выполнения. C++ пропускает всё это:

  1. Компилятор (такой как g++ или clang++) читает ваш исходник .cpp и переводит его в машинные инструкции для конкретного процессора и операционной системы.
  2. Результат - автономный исполняемый файл, который процессор запускает напрямую: ничто не стоит между вашим кодом и железом.

Поскольку во время работы программы не происходит никакого перевода, программы на 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.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ