1. Основы C++: синтаксис, типы, управление потоком
Основы C++: синтаксис, типы, управление потоком
C++ — компилируемый язык общего назначения. В рамках курса мы будем двигаться от базового синтаксиса к современным возможностям стандарта C++23 и затем — к разработке приложений с Qt 6.0. Эта статья закладывает фундамент: как выглядит программа на C++, какие бывают типы, как объявлять переменные и управлять выполнением кода.
Что такое программа на C++
Обычно проект на C++ состоит из файлов исходного кода (часто .cpp) и заголовков (часто .h/.hpp). Заголовки подключают директивой #include, а точка входа программы — функция main.
Минимальная программа:
Ключевые элементы:
#include <iostream> подключает стандартный ввод-вывод.int main() — функция, с которой начинается выполнение.std::cout — поток вывода в консоль; std:: — пространство имён стандартной библиотеки.return 0; — код успешного завершения.Комментарии:
Имена, блоки и область видимости
Код организуется в блоки { ... }. Переменные, объявленные внутри блока, обычно доступны только в нём.
Практическое правило: объявляйте переменную как можно ближе к месту использования — так проще читать код и меньше риск ошибок.
Переменные и инициализация
Объявление переменной включает тип, имя и (обычно) инициализацию.
Рекомендуемый стиль для базовых типов — инициализация {...}:
auto
auto просит компилятор вывести тип из инициализатора.
Важно: auto не делает переменную «динамически типизированной». Тип всё равно фиксирован, просто выводится автоматически.
const и constexpr
const запрещает менять значение после инициализации.constexpr означает, что значение можно вычислить на этапе компиляции (если все данные известны).Практическое правило:
const, если значение должно быть неизменяемымconstexpr, если значение является константой «по смыслу» и может быть вычислено компиляторомБазовые типы данных
Ниже — самые частые типы, с которых обычно начинают.
| Категория | Типы | Для чего обычно используют |
|---|---|---|
| Целые | int, long long, short | счётчики, индексы, целые значения |
| Беззнаковые целые | unsigned int, std::size_t | размеры, индексы контейнеров |
| Вещественные | float, double | вычисления с дробями |
| Логический | bool | условия, флаги |
| Символьные | char, wchar_t, char8_t | символы и кодировки |
Замечания, которые важны с самого начала:
int зависит от платформы; чаще всего встречается 32-битный intstd::size_t — стандартный тип для размеров и индексов (беззнаковый)double часто не подходит из-за ошибок представления; это отдельная тема, к которой вернёмся позжеСтроки
В C++ есть два наиболее распространённых «мира строк»:
const char* (как в примере с auto name = "Bob";)std::string из стандартной библиотекиДля большинства задач в прикладном коде используйте std::string:
Операторы и выражения
Выражение — это то, что вычисляется в значение: a + b, x > 0, i++.
Основные группы операторов:
+, -, *, /, %==, !=, <, <=, >, >=&&, ||, != и составные +=, -=, *=, ...Частая ошибка новичков — путать = и ==:
Практическое правило: если выражение получается сложным, добавляйте скобки, даже если вы помните приоритеты операторов — читаемость важнее.
Ссылки и указатели (минимально необходимое)
Ссылки
Ссылка (T&) — это другое имя для уже существующего объекта.
Свойства:
Ссылки часто используют в параметрах функций, чтобы не копировать данные.
Указатели
Указатель (T*) хранит адрес объекта. Он может быть равен nullptr.
Практическое правило: не используйте «сырые» указатели для владения памятью. Позже в курсе будут умные указатели (std::unique_ptr, std::shared_ptr) и RAII.
Управление потоком выполнения
Управление потоком — это конструкции, которые позволяют ветвиться и повторять действия.
if / else
Условие в if должно иметь тип, приводимый к bool.
Тернарный оператор ?:
Компактная форма выбора значения:
switch
switch удобен, когда есть много вариантов по одному целому значению или перечислению (enum).
Важные детали:
case должны быть константными значениямиbreak выполнение «провалится» в следующий case (иногда это нужно, но чаще это источник ошибок)Цикл while
Повторяет блок, пока условие истинно.
Цикл do while
Проверяет условие после выполнения тела: тело выполнится хотя бы один раз.
Цикл for
Классический цикл со счётчиком.
Практическое правило: чаще используйте ++i (префиксный инкремент), это привычный стиль и потенциально эффективнее для сложных итераторов.
Диапазонный for (range-based for)
Используется для обхода контейнеров.
break и continue
break — выйти из ближайшего цикла или switchcontinue — перейти к следующей итерации циклаПрактические рекомендации, которые пригодятся дальше
using namespace std; в учебных и рабочих проектах: это создаёт конфликты имён.std::size_t, но помните, что это беззнаковый тип: смешивание int и std::size_t в сравнениях — частый источник неожиданных результатов.const T& для чтения без копирования и T& для изменения.