C++ — компилируемый язык
Чтобы запустить написанную программу, исходный код должен пройти два этапа обработки. Код, который вы пишете — это лишь текстовые символы, непонятные компьютеру. Компилятор преобразует эти текстовые обозначения в набор команд, понятных процессору — машинный код, который ЦПУ выполняет построчно.
- Компиляция: компилятор считывает исходные файлы и генерирует объектные файлы;
- Линковка: линковщик объединяет несколько объектных файлов в единый исполняемый файл программы.
Проект на C++ обычно состоит из множества исходных файлов. Схема рабочего процесса представлена ниже:

Полученный исполняемый файл привязан к конкретному оборудованию и операционной системе, он не работает напрямую на других платформах (программа для macOS не запустится на Windows без перекомпиляции).
Так называемая переносимость C++ относится к переносимости исходного кода: один и тот же набор исходных файлов можно скомпилировать на разных системах и запустить без ошибок.
Другими словами: exe-файл, скомпилированный под Windows, нельзя просто скопировать на Mac и запустить. Нужно перенести сами исходные тексты (.cpp, .h), затем на Mac собрать их с помощью компилятора C++ для macOS в совместимую программу.
Стандарт ISO C++
Стандарт ISO C++ состоит из двух основных частей
- Основные средства языка: встроенные базовые возможности языка, например стандартные типы
char/int, циклыfor/whileи т.д. - Компоненты стандартной библиотеки: официальный набор инструментов: контейнеры
vector/map, вывод через оператор<<, чтение ввода функциейgetline()и другие операции ввода-вывода.
Вся стандартная библиотека написана на чистом C++ и поставляется вместе со всеми популярными компиляторами. Только очень низкоуровневые операции (переключение контекста потоков) используют небольшие фрагменты машинного кода.
Зачем нужна стандартная библиотека? По назначению она похожа на привычные SDK. Ее задача — снизить трудозатраты разработчиков на C++. Если бы каждый программист реализовывал все базовые функции с нуля, язык не получил бы широкого распространения. К примеру, вывод текста в консоль потребовал бы огромного повторяющегося кода у каждого разработчика. Чтобы решить эту проблему, создатели C++ написали готовый набор модулей, скомпилировали их в библиотеки (.lib) и предоставили для общего использования. Проще говоря, это позволяет не изобретать велосипед заново, значительно ускоряет разработку и привлекает новых пользователей.
Стандартная библиотека не опирается на скрытые хитрости синтаксиса, она полностью написана на C++. Вы можете изучить ее исходный код и создавать собственные аналогичные утилиты.
C++ — статически типизированный язык
Для всех переменных, значений, идентификаторов и выражений компилятор должен точно знать их тип в месте использования кода. Тип объекта напрямую определяет, какие операции и вычисления он поддерживает.
Главное преимущество статической типизации: проверка типов выполняется на этапе компиляции. Многие ошибки перехватываются компилятором сразу при написании кода, программа не падает во время запуска — это сочетает безопасность и высокую производительность. Поясним: когда компилятор преобразует код в машинный язык, он выдаст ошибку при несоответствии типов. Например, попытка сохранить текстовое имя в целочисленную переменную для возраста вызовет ошибку компиляции. Ошибки сборки разработчик исправляет сразу, а ошибки времени выполнения исправить гораздо сложнее, особенно если программа уже разослана пользователям.