Загружаем лабораторные…
>_ cifra / labs

~/cpp/glossary/

Справочник C++

247 терминов из 10 лекций. Определения, примеры и ссылки на главы, в которых они встречаются.

Показано терминов: 247 из 247

А

automatic storage · Automatic storage duration

Способ хранения объектов, время жизни которых обычно связано с блоком.

Лекция 8 · Справочник терминов

Другие определения · 1

Локальные объекты без static/thread_local обычно существуют в рамках выполнения своего блока; место хранения может быть реализовано через стек.

Лекция 9 · Термины

Address · Object address

Значение, позволяющее ссылаться на место размещения объекта. Для объяснений ниже используются условные адреса.

Лекция 7 · Адрес и указатель

Другие определения · 1

Местоположение объекта в адресном пространстве программы.

&x

Лекция 7 · Адрес и указатель

Amortized complexity

Анализ стоимости серии операций вместо стоимости одного худшего случая.

vector::push_back — O(1) амортизированно

Лекция 4 · +Необязательно, но полезноДополнительноАмортизация · списки · учебная диагностика⌄Амортизированная сложностьОтдельный vector::push_back иногда переносит все элементы и стоит O(n), но при геометрическом росте буфера серия из n добавлений требует суммарно O(n). Поэтому стоимость одного добавления амортизированно O(1).!Не путать: амортизированное O(1) описывает последовательность операций, а O(1) в среднем у хеш-таблицы зависит от характера хеширования и входных данных.Списки≡Дополнительные последовательные структурыstd::list — двусвязный список, std::forward_list — односвязный. Итераторы этих списков не обеспечивают доступ по индексу за O(1); зато возможны эффективные вставка и удаление при наличии итератора на нужную позицию.Мини-анализатор C++Локально распознаёт только несколько типичных ошибок, не является полноценным компилятором или clang-tidy.

associativity · Operator associativity

Правило синтаксической группировки операторов равного приоритета. Не следует путать с математической ассоциативностью операции (a+b)+c = a+(b+c).

Лекция 2 · Группировка операторов

Другие определения · 1

Группировка операторов одного приоритета; это не порядок вычисления.

a=b=c → a=(b=c)

Лекция 2 · Группировка операторов

В

else

Выбор выполняемых действий по условию. В конструкции if / else одна ветвь выполняется при истинном условии, другая — при ложном.

if (value > 0) { /* положительное */ } else { /* остальные */ }

Лекция 2 · Условные конструкции

Dangling reference

ссылка, объект назначения которой уже не существует. Попытка читать или изменять через неё уничтоженный объект приводит к неопределённому поведению (UB).

Лекция 8 · Висячие ссылки и время жизни

Другие определения · 3

Ссылка, объект назначения которой уже уничтожен.

Лекция 8 · Висячие ссылки и время жизни

Ссылка, связанная с объектом, время жизни которого завершилось.

Лекция 10 · Продление времени жизни

Ссылка, которая больше не обозначает живой объект; использование объекта через неё — UB.

Лекция 10 · Продление времени жизни

dangling pointer

Указатель, указывавший на уже уничтоженный объект.

p = &x; // x разрушен

Лекция 7 · Время жизни объекта и висячие указатели

Другие определения · 2

Адрес сохранён, но объекта по нему больше нет. В отличие от утечки указатель здесь остался, а объект уже уничтожен.

Лекция 9 · Утечки памяти и ошибки освобождения

Указатель, который больше не указывает на живой объект, хотя сохраняет прежнее значение адреса.

Лекция 9 · Утечки памяти и ошибки освобождения

return statement · return

Завершение текущего вызова функции и передача результата, если её тип предусматривает возвращаемое значение. Инструкция return с выражением возвращает значение; return без выражения используется для досрочного выхода из void-функции.

int square(int value) { return value * value; }

Лекция 3 · Создание и вызов функций

return by reference

функция с возвращаемым типом T&, результат которой обозначает уже существующий объект. Такой результат обычно является lvalue, поэтому ему можно присвоить значение.

Лекция 8 · Возврат по ссылке

Другие определения · 1

Функция с типом результата T&, отдающая доступ к уже существующему объекту.

Лекция 8 · Возврат по ссылке

Runtime

Период, когда уже собранная программа запущена и выполняет действия: читает данные, вызывает функции, вычисляет значения и выводит результат. Compile time — время сборки, когда компилятор проверяет код и переводит его в исполняемую форму.

Лекция 1 · Глобальная область, подключения и runtime

Другие определения · 3

Этап работы программы после компиляции и запуска.

std::cin >> x;

Лекция 1 · Глобальная область, подключения и runtime

Этап, на котором программа уже исполняется. int x = 5; связывает имя с типом при компиляции; значение x изменяется во время выполнения.

Лекция 1 · Типизация

Период, когда уже запущенная программа выполняет машинные инструкции.

Лекция 5 · Стадии программы и виды ошибок

object lifetime

Период, в течение которого объект существует в модели C++.

{ int x = 5; }

Лекция 7 · Взятие адреса и разыменование

Другие определения · 2

Промежуток, в течение которого объект существует согласно правилам C++. У автоматических локальных объектов срок обычно заканчивается при выходе из соответствующего блока.

Лекция 8 · Висячие ссылки и время жизни

Период существования объекта в C++.

Лекция 8 · Висячие ссылки и время жизни

Overload resolution

Определение наиболее подходящей функции по типам аргументов и допустимым преобразованиям.

Лекция 10 · Перегрузка и const

Другие определения · 1

Правила выбора наиболее подходящей функции среди одноимённых кандидатов по аргументам и преобразованиям.

Лекция 10 · Перегрузка и const

Alignment

Ограничения на подходящие адреса размещения объектов.

alignof(T)

Лекция 7 · +Необязательно, но полезноДополнительноВиртуальные адреса, сравнение указателей, касты, выравнивание и диагностика⌄Указатель не обязан быть обычным числомВо вводном объяснении мы считаем его числовым адресом. Стандарт C++ не требует, чтобы любой указатель хранился как простое целое число или чтобы все указатели занимали 8 байт. Отображение std::cout << p — форматирование указателя, а не арифметика над его числовым представлением.Сравнение указателейРавенство указателей осмысленно для подходящих совместимых типов, но < и > не стоит использовать для определения порядка независимых локальных объектов. Порядок для элементов одного массива соответствует порядку элементов. Для полного порядка указателей в ассоциативных структурах есть std::less.Выравнивание (alignment)Размещение объектов часто требует адресов, кратных определённым степеням двойки, но нельзя универсально утверждать, что int всегда стоит на адресе, кратном 4, или что double всегда на кратном 8: это зависит от платформы, типа и специальных способов размещения.Приведение указателей к целым числамreinterpret_cast разрешает низкоуровневые преобразования в некоторых случаях, но не делает случайный адрес допустимым. Для промежуточного целочисленного представления, когда оно поддерживается реализацией, используют std::uintptr_t из <cstdint>. Даже обратное преобразование адреса не означает, что по нему живёт нужный объект.Как находить ошибки памятиВо время разработки полезно включать предупреждения и AddressSanitizer / UndefinedBehaviorSanitizer. Это помогает находить выходы за границы и use-after-scope, хотя инструменты не доказывают отсутствие всех видов UB.

Expression

Конструкция, которая вычисляется; имеет тип и категорию значения

x + 5

Лекция 1 · Сущности языка

Другие определения · 2

Конструкция языка, которая вычисляется и может иметь значение, тип и категорию значения.

x + 5

Лекция 1 · Сущности языка

Комбинация операций и операндов, имеющая тип и категорию значения.

x + 5

Лекция 3 · Создание и вызов функций

Г

global namespace scope

Область вне тел функций, классов и явно объявленных пространств имён. Здесь можно объявлять переменные, функции, типы и пространства имён. Имя, объявленное здесь, доступно в допустимых местах после объявления, если его не скрывает другое имя.

Лекция 1 · Глобальная область, подключения и runtime

Д

declarator

часть объявления, которая описывает имя и форму типа: указатель, ссылка, массив или функция. Скобки определяют порядок связывания этих конструкций.

Лекция 8 · Сложные объявления

Другие определения · 1

Часть объявления, связывающая имя с конструкцией типа: *, &, [], ().

Лекция 8 · Сложные объявления

Diagnostics

Сообщения компилятора о найденных ошибках и подозрительных конструкциях.

error, warning, note

Лекция 5 · Стадии программы и виды ошибок

Другие определения · 1

Сообщения компилятора и инструментов о возможных или обязательных ошибках, с указанием места и часто предлагаемого исправления.

Лекция 5 · Практика диагностики

dynamic array · std::vector

Последовательность непрерывно расположенных элементов, размер которой может изменяться во время выполнения. В C++ стандартный контейнер std::vector управляет такой последовательностью. Размер и вместимость различаются; перевыделение памяти может сделать старые адреса элементов недействительными.

std::vector<int> values{2, 4, 6};

Лекция 4 · Динамические массивы

Другие определения · 3

хранит элементы подряд в памяти, расширяя выделенный буфер при необходимости. Доступ по индексу — O(1).

Лекция 4 · Динамические массивы

Последовательность подряд расположенных элементов с возможностью изменять размер.

std::vector<int> v

Лекция 4 · Динамические массивы

Контейнер, самостоятельно управляющий выделением и освобождением своей памяти.

Лекция 9 · +Необязательно, но полезноДополнительноРеальная память, сборка мусора, RAII, санитайзеры⌄ Четыре длительности хранения, а не три сегментаСтандарт C++ различает automatic, static, dynamic, а также thread storage duration для thread_local. Слова «стек», «куча» и «data» описывают распространённые механизмы реализации и раскладку исполняемого файла. Например, компилятор может хранить локальное число в регистре, вообще не выделяя для него слот в стеке. Реальные секции образа процессаРеализации обычно различают .text, .rodata, .data, .bss и другие секции. Стек каждого потока и динамические отображения могут находиться далеко друг от друга. Размер стека не зафиксирован стандартом и обычно индивидуален для потока. Откуда new получает память?Выражение new вызывает функцию выделения памяти (operator new), которая часто пользуется библиотечным аллокатором и лишь при необходимости запрашивает новые страницы у ОС. Каждый new не обязан делать отдельный системный вызов. Аналогично, delete не гарантирует немедленный возврат страниц ОС. Сборщик мусора и владение ресурсамиВ C++ по умолчанию нет обязательного сборщика мусора для new-объектов. Но современный стиль почти никогда не требует вручную писать new/delete для прикладного кода: std::vector хранит массив, std::unique_ptr владеет единичным объектом, а RAII связывает освобождение с деструктором владельца. Поиск ошибокПри запуске с AddressSanitizer часто обнаруживаются use-after-free, buffer overflow и некоторые утечки. Пример:Диагностика зависит от компилятора, ОС и конкретной ошибки; ни один санитайзер не доказывает полное отсутствие UB.

dynamic storage · Dynamic storage duration

Время жизни объекта управляется выделением и освобождением памяти.

Лекция 8 · Справочник терминов

Другие определения · 1

Память для объекта запрашивается во время работы программы и освобождается отдельным действием.

Лекция 9 · Термины

preprocessor directive · #include

Указание для предварительной обработки исходного текста перед компиляцией. Например, #include подключает содержимое заголовка, чтобы программе были доступны нужные объявления.

#include <iostream>

Лекция 1 · Глобальная область, подключения и runtime

Storage duration

свойство объекта, определяющее, как долго для него существует хранилище. В этой лекции изучаются статическая, автоматическая и динамическая длительности хранения.

Лекция 9 · Карта памяти программы

Другие определения · 1

Категория времени, в течение которого предоставлено хранилище объекта: автоматическая, статическая, динамическая, а также thread-local.

Лекция 9 · Карта памяти программы

Use-after-free

Использование объекта после delete; типичный источник UB.

Лекция 9 · +Необязательно, но полезноДополнительноРеальная память, сборка мусора, RAII, санитайзеры⌄ Четыре длительности хранения, а не три сегментаСтандарт C++ различает automatic, static, dynamic, а также thread storage duration для thread_local. Слова «стек», «куча» и «data» описывают распространённые механизмы реализации и раскладку исполняемого файла. Например, компилятор может хранить локальное число в регистре, вообще не выделяя для него слот в стеке. Реальные секции образа процессаРеализации обычно различают .text, .rodata, .data, .bss и другие секции. Стек каждого потока и динамические отображения могут находиться далеко друг от друга. Размер стека не зафиксирован стандартом и обычно индивидуален для потока. Откуда new получает память?Выражение new вызывает функцию выделения памяти (operator new), которая часто пользуется библиотечным аллокатором и лишь при необходимости запрашивает новые страницы у ОС. Каждый new не обязан делать отдельный системный вызов. Аналогично, delete не гарантирует немедленный возврат страниц ОС. Сборщик мусора и владение ресурсамиВ C++ по умолчанию нет обязательного сборщика мусора для new-объектов. Но современный стиль почти никогда не требует вручную писать new/delete для прикладного кода: std::vector хранит массив, std::unique_ptr владеет единичным объектом, а RAII связывает освобождение с деструктором владельца. Поиск ошибокПри запуске с AddressSanitizer часто обнаруживаются use-after-free, buffer overflow и некоторые утечки. Пример:Диагностика зависит от компилятора, ОС и конкретной ошибки; ни один санитайзер не доказывает полное отсутствие UB.

Ё

capacity()

Количество элементов, которое вектор способен разместить без нового выделения памяти.

v.capacity()

Лекция 4 · Строки

Ж

З

Implementation-defined Behavior

Из набора допустимых вариантов выбирается и документируется вариант реализации.

sizeof(int) на платформе

Лекция 5 · Другие категории поведения

Другие определения · 1

Реализация выбирает и документирует один из разрешённых стандартом вариантов.

Лекция 5 · Другие категории поведения

И

Initialization

Задание начального состояния объекта при создании. Не равно последующему присваиванию.

int x{5};

Лекция 1 · Глобальная область, подключения и runtime

Другие определения · 3

Получение объектом начального состояния при создании. int x = 5; определяет и инициализирует переменную. int x; тоже определяет переменную, но локальный int остаётся без заданного значения.

Лекция 3 · Объявления и определения

Задание начального состояния объекта при его создании.

Лекция 6 · Обычные массивы

Предоставление объекту начального значения при создании; new int{} и new int имеют разные свойства.

Лекция 9 · Динамические массивы

statement

Грамматическая единица, например выражение-инструкция или цикл

x += 1;, if(...)

Лекция 1 · Сущности языка

Другие определения · 4

Грамматическая единица тела функции: объявление, выражение-инструкция, блок, условие или цикл.

x += 1; / if (x) {}

Лекция 1 · Сущности языка

Единица языка, исполняемая в потоке управления; не всякий знак относится к оператору.

if, while, x++;

Лекция 2 · Приоритет и порядок вычислений

Самостоятельная грамматическая конструкция: объявление, выражение-инструкция, блок {...}, управление if / for / while и др.

Лекция 3 · Выражения и инструкции

Грамматическая конструкция в теле функции: выражение-инструкция, объявление, цикл, блок и др.

x++; / if (x) {}

Лекция 3 · Выражения и инструкции

std::unique_ptr

Умный указатель, автоматически вызывающий удаление объекта при завершении владения.

Лекция 9 · +Необязательно, но полезноДополнительноРеальная память, сборка мусора, RAII, санитайзеры⌄ Четыре длительности хранения, а не три сегментаСтандарт C++ различает automatic, static, dynamic, а также thread storage duration для thread_local. Слова «стек», «куча» и «data» описывают распространённые механизмы реализации и раскладку исполняемого файла. Например, компилятор может хранить локальное число в регистре, вообще не выделяя для него слот в стеке. Реальные секции образа процессаРеализации обычно различают .text, .rodata, .data, .bss и другие секции. Стек каждого потока и динамические отображения могут находиться далеко друг от друга. Размер стека не зафиксирован стандартом и обычно индивидуален для потока. Откуда new получает память?Выражение new вызывает функцию выделения памяти (operator new), которая часто пользуется библиотечным аллокатором и лишь при необходимости запрашивает новые страницы у ОС. Каждый new не обязан делать отдельный системный вызов. Аналогично, delete не гарантирует немедленный возврат страниц ОС. Сборщик мусора и владение ресурсамиВ C++ по умолчанию нет обязательного сборщика мусора для new-объектов. Но современный стиль почти никогда не требует вручную писать new/delete для прикладного кода: std::vector хранит массив, std::unique_ptr владеет единичным объектом, а RAII связывает освобождение с деструктором владельца. Поиск ошибокПри запуске с AddressSanitizer часто обнаруживаются use-after-free, buffer overflow и некоторые утечки. Пример:Диагностика зависит от компилятора, ОС и конкретной ошибки; ни один санитайзер не доказывает полное отсутствие UB.

Iterator

Объект, с помощью которого можно обратиться к элементу контейнера и переходить к следующему. find() возвращает итератор найденного элемента либо end().

Лекция 4 · Словари и множества

Другие определения · 1

Объект, указывающий на элемент контейнера и позволяющий обходить его.

m.find(key)

Лекция 4 · Словари и множества

К

Stack frame

Набор данных одного вызова функции. Кадры обычно добавляются при вызове и снимаются при возврате.

Лекция 9 · Стек, области видимости и вызовы

Другие определения · 1

Часть стека, относящаяся к конкретному вызову функции; может включать локальные значения, служебные данные, сохранённые регистры.

Лекция 9 · Стек, области видимости и вызовы

lvalue · prvalue · xvalue

Упрощение «lvalue — можно писать слева от =» удобно на старте, но неточно: существуют const-lvalue, которым присваивать нельзя. Категории описывают свойства выражений, а не просто место относительно знака равно.

Лекция 3 · Присваивание и категории значений

comparator

Функция-предикат, отвечающая, должен ли первый элемент идти раньше второго.

Лекция 6 · Указатели на функции и сортировка

Другие определения · 1

Функция или объект, реализующий требуемое отношение порядка для сравнения.

Лекция 6 · Указатели на функции и сортировка

end of file · EOF · eof()

Состояние потока, устанавливаемое после операции, обнаружившей конец входных данных. Предварительная проверка eof() не гарантирует успешность следующего чтения.

while (input >> value) { /* обрабатываем прочитанное */ }

Лекция 10 · Практика: файловые потоки для лабораторной

const

Квалификация типа, ограничивающая возможность модифицировать объект через соответствующее выражение.

Лекция 10 · Что означает const

Другие определения · 1

квалификатор типа, ограничивающий допустимые операции модификации через соответствующее выражение. const int и int — разные cv-квалифицированные формы типа.

Лекция 10 · Что означает const

std::array

Контейнер с фиксированным размером, поддерживающий операции стандартной библиотеки.

Лекция 6 · +Необязательно, но полезноДополнительноПеревёрнутый индекс, std::span, std::array, исходные указатели и вариадические функции⌄ Почему корректно 2[a]?Для встроенной индексации a[i] определено через *(a + i). Сложение целого и указателя коммутативно в этой форме, поэтому i[a] синтаксически корректно и даёт тот же элемент. Это интересный факт о C/C++, но такой стиль ухудшает читаемость. Как сохранить размер массива при передаче?В современном C++ можно передать параметр по ссылке на массив: template<std::size_t N> void f(int (&a)[N]);. Для обычного кода удобнее использовать std::span (невладеющее представление непрерывной последовательности, C++20), std::array (фиксированный размер) или std::vector (динамический размер). Почему нет гарантии про служебные байты перед массивом?Реальные аллокаторы могут хранить метаданные в разных местах; конкретное расположение является внутренней деталью реализации. Обращение к p[-1] при p, полученном от new[], не становится допустимым из-за того, что там иногда видны «интересные числа». Современные альтернативы для функции-обратного вызоваКроме обычных указателей на функции, компаратором могут быть функциональный объект или лямбда. Они поддерживают передачу дополнительного состояния, а компилятор зачастую может инлайнить вызовы. Почему не стоит использовать ... в прикладном C++В C-подобных вариадических функциях типы дополнительных аргументов не проверяются по сигнатуре, а при использовании va_arg требуется знать фактически переданный тип с учётом стандартных продвижений. Современная альтернатива — вариадические шаблоны и безопасные обёртки.

Л

Literal

Значение, записанное прямо в коде

42, "hi"

Лекция 1 · Сущности языка

Другие определения · 2

Запись конкретного значения прямо в программе: 5, 3.14, 'A', "abc". Вид записи влияет на тип значения.

Лекция 1 · Целые числа

Запись значения непосредственно в исходном коде.

42, 3.14, true, 'A'

Лекция 1 · Сущности языка

static local

объект с блочной областью видимости, но со статической длительностью хранения. Его значение сохраняется между вызовами функции.

Лекция 9 · Локальные статические переменные

Другие определения · 1

Имя видно в блоке, однако хранилище существует весь срок программы; инициализация выполняется один раз.

Лекция 9 · Локальные статические переменные

М

array

объект, состоящий из фиксированного числа элементов одного типа, расположенных подряд в памяти. Длина входит в тип массива.

Лекция 6 · Обычные массивы

Другие определения · 1

Объект фиксированного размера из элементов одного типа, размещённых подряд.

Лекция 6 · Обычные массивы

VLA

Массив, размер которого узнаётся только во время выполнения. Для переносимого C++ используем std::vector<int> a(n);.

Лекция 6 · Динамические массивы и VLA

Другие определения · 1

Нестандартное для C++ расширение: размер массива известен лишь во время выполнения.

Лекция 6 · Динамические массивы и VLA

set · std::set

Набор уникальных значений. Повторное добавление того же значения не создаёт второй элемент. std::set хранит значения в порядке, заданном компаратором.

std::set<int> values{1, 1, 2}; // два разных элемента

Лекция 4 · Словари и множества

Н

Unspecified Behavior

Допустимо несколько вариантов; выбор можно не документировать.

порядок независимых аргументов

Лекция 5 · Другие категории поведения

Другие определения · 1

Стандарт разрешает несколько определённых вариантов поведения, не требуя документировать конкретный выбор.

Лекция 5 · Другие категории поведения

О

data · Data segment

Собирательное название областей для данных со статической длительностью хранения (в реальности это несколько секций, например .data и .bss).

Лекция 9 · Термины

Object

Область хранения с типом и временем жизни

объект x типа int

Лекция 1 · Сущности языка

Другие определения · 2

Область хранения, имеющая тип и время жизни. Переменная — именованный объект или ссылка; временные объекты также существуют.

int x = 5;

Лекция 1 · Сущности языка

Область хранения с типом и временем жизни в модели объектов C++.

int x = 5;

Лекция 7 · Адрес и указатель

Declaration

Вводит имя и сообщает компилятору, что за сущность обозначается этим именем. void f(int); объявляет функцию, но не задаёт её тело.

Лекция 1 · Сущности языка

Другие определения · 2

Вводит имя сущности в программу и сообщает компилятору сведения о ней.

void f(int);

Лекция 1 · Сущности языка

Сообщает о существовании сущности и вводит её имя.

void f(int);

Лекция 3 · Области видимости и конфликты имён

Comma operator

Бинарное выражение (e1, e2): гарантирует вычисление e1 перед e2 и имеет результат и категорию значения e2. В списках аргументов запятые служат разделителями, а не этим оператором.

Лекция 2 · Запятая и sizeof

Другие определения · 1

Последовательно вычисляет два операнда и возвращает правый.

(a(), b())

Лекция 2 · Запятая и sizeof

sizeof · sizeof operator

Даёт размер типа или выражения в байтах; не возвращает количество элементов указателя.

Лекция 6 · Обычные массивы

Другие определения · 2

Специальный оператор языка, возвращающий размер типа / объекта в единицах sizeof(char). Для обычных типов C++ не вычисляет само выражение-операнд sizeof(expr).

Лекция 2 · Запятая и sizeof

Возвращает размер типа или объекта в байтах, не число элементов контейнера.

sizeof(int)

Лекция 2 · Запятая и sizeof

Definition

Даёт определение сущности. void f(int x) {} одновременно объявляет и определяет функцию. Всякое определение — объявление, но не наоборот.

Лекция 1 · Сущности языка

Другие определения · 2

Объявление, дающее полное описание сущности либо создающее её, в зависимости от вида сущности.

int x = 5; / void f() {}

Лекция 1 · Сущности языка

Даёт определение сущности: для функции — тело, для переменной — чаще всего сам объект.

void f(int x) { }

Лекция 3 · Пространства имён и using

Optimization

Преобразование кода с целью эффективности при сохранении требуемого наблюдаемого поведения корректной программы.

Лекция 5 · Почему UB меняет оптимизацию

Другие определения · 1

Преобразования программы для эффективности с сохранением поведения корректного кода.

-O2

Лекция 5 · Почему UB меняет оптимизацию

П

pass by value

Параметр функции создаётся как отдельный объект.

f(x) получает копию int

Лекция 7 · Зачем это нужно: функции и изменение переменных

Другие определения · 4

создаёт отдельный параметр функции. Передача по ссылке позволяет функции обращаться к исходному объекту вызывающего кода без ручных & и *.

Лекция 8 · Ссылки в функциях

Создание отдельного объекта-параметра из аргумента вызова.

Лекция 8 · Ссылки в функциях

Образуется самостоятельный объект-параметр; его изменения не затрагивают аргумент.

Лекция 10 · Передача параметров

Функция получает собственный параметр-объект.

Лекция 10 · Передача параметров

pass by reference

Параметр функции с типом T&, который обозначает объект аргумента.

Лекция 8 · Ссылки в функциях

Другие определения · 2

Параметр именует исходный объект без копирования всего объекта.

Лекция 10 · Передача параметров

Функция получает новое имя исходного объекта аргумента.

Лекция 10 · Передача параметров

switch statement · switch

Конструкция выбора по значению выражения. В C++ switch сопоставляет значение с метками case; default используется для остальных значений. Инструкция break завершает выполнение switch.

switch (choice) { case 1: break; default: break; }

Лекция 2 · Условные конструкции

Variable

Именованная переменная-сущность, обычно объект или ссылка

int x = 5;

Лекция 1 · Сущности языка

Другие определения · 1

Объявленная сущность с именем; для привычных переменных типа int это именованный объект, содержимое которого можно менять.

int x = 5; x = 9;

Лекция 1 · Сущности языка

Stack overflow

Исчерпание доступного пространства стека. В типичных системах проявляется аварийным завершением, но точное поведение зависит от платформы и настройки исполнения.

Лекция 9 · Почему переполняется стек

Другие определения · 1

Исчерпание пространства стека, часто при слишком глубокой рекурсии либо крупных автоматических объектах.

Лекция 9 · Почему переполняется стек

Promotion

Вид стандартного преобразования, например char → int либо float → double в определённых контекстах.

char c='a'; int n=c+1;

Лекция 1 · Термины

Другие определения · 1

Повышение обычно предпочтительнее обычной конверсии при выборе перегрузки.

float → double (promotion)

Лекция 3 · Перегрузка функций

file position · tellg() · seekg()

Место в потоке, откуда производится чтение или куда выполняется запись. Позиция потока и номер числовой записи — разные понятия; номер записи считают отдельным счётчиком.

auto position = input.tellg();
input.clear();
input.seekg(0);

Лекция 10 · Практика: файловые потоки для лабораторной

std::span

Невладеющее представление последовательных элементов, включая указатель и длину; C++20.

Лекция 6 · +Необязательно, но полезноДополнительноПеревёрнутый индекс, std::span, std::array, исходные указатели и вариадические функции⌄ Почему корректно 2[a]?Для встроенной индексации a[i] определено через *(a + i). Сложение целого и указателя коммутативно в этой форме, поэтому i[a] синтаксически корректно и даёт тот же элемент. Это интересный факт о C/C++, но такой стиль ухудшает читаемость. Как сохранить размер массива при передаче?В современном C++ можно передать параметр по ссылке на массив: template<std::size_t N> void f(int (&a)[N]);. Для обычного кода удобнее использовать std::span (невладеющее представление непрерывной последовательности, C++20), std::array (фиксированный размер) или std::vector (динамический размер). Почему нет гарантии про служебные байты перед массивом?Реальные аллокаторы могут хранить метаданные в разных местах; конкретное расположение является внутренней деталью реализации. Обращение к p[-1] при p, полученном от new[], не становится допустимым из-за того, что там иногда видны «интересные числа». Современные альтернативы для функции-обратного вызоваКроме обычных указателей на функции, компаратором могут быть функциональный объект или лямбда. Они поддерживают передачу дополнительного состояния, а компилятор зачастую может инлайнить вызовы. Почему не стоит использовать ... в прикладном C++В C-подобных вариадических функциях типы дополнительных аргументов не проверяются по сигнатуре, а при использовании va_arg требуется знать фактически переданный тип с учётом стандартных продвижений. Современная альтернатива — вариадические шаблоны и безопасные обёртки.

Qualification conversion

Стандартное преобразование cv-квалификации при соблюдении правил безопасности.

Лекция 10 · Преобразование const

Другие определения · 1

Преобразование, меняющее cv-квалификацию типа по правилам языка; простое добавление const на первом уровне безопасно.

Лекция 10 · Преобразование const

Array-to-pointer conversion

В выражениях массив часто превращается в указатель на первый элемент.

Лекция 6 · Массив и указатель

Другие определения · 1

неявное преобразование выражения типа «массив из N элементов T» в указатель T* на его начальный элемент в соответствующем контексте.

Лекция 6 · Массив и указатель

implicit conversion

При несовпадении ожидаемого и фактического типов компилятор иногда вставляет преобразование. Оно может быть безопасным (char → int) или с потерей информации (double → int).

Лекция 1 · Типизация

namespace

Группирует объявления и отделяет их имена

namespace n { ... }

Лекция 1 · Сущности языка

Другие определения · 2

область, которая группирует имена. Имя n::x явно указывает: ищем x в n. Это помогает разделять код больших проектов.

Лекция 3 · Пространства имён и using

Логическая область для группировки имён и защиты от их конфликтов.

namespace math { int x=2; }

Лекция 3 · Пространства имён и using

procedure

Учебное название функции с типом результата void. Она выполняет действие, например выводит сообщение или изменяет данные через параметры, но не возвращает значение вызывающему коду. Главное отличие от функции с результатом: вызов процедуры нельзя использовать там, где нужно число или другое значение. Отдельной конструкции procedure в C++ нет — используется обычная void-функция.

void printMessage() {
    std::cout << "Готово\n";
}
// Вызов printMessage() выполняет вывод, но не возвращает значение.

Лекция 3 · Создание и вызов функций

Другие определения · 1

Учебное название функции с типом результата void. Она выполняет действие, но не возвращает значение вызывающему коду. В C++ отдельной конструкции procedure нет: процедура записывается как обычная функция.

Лекция 3 · Создание и вызов функций

Type alias

Конструкция using Int = long long; задаёт ещё одно имя того же типа, не создавая нового отдельного типа. typedef позволяет делать подобное, но хуже читается для сложных типов и не поддерживает alias templates.

Лекция 3 · Пространства имён и using

Другие определения · 1

Другое имя уже существующего типа, а не новый отдельный тип.

using VI=std::vector<int>;

Лекция 3 · Пространства имён и using

Р

extent

Число элементов массива; в типе int[5] оно равно 5.

Лекция 6 · +Необязательно, но полезноДополнительноПеревёрнутый индекс, std::span, std::array, исходные указатели и вариадические функции⌄ Почему корректно 2[a]?Для встроенной индексации a[i] определено через *(a + i). Сложение целого и указателя коммутативно в этой форме, поэтому i[a] синтаксически корректно и даёт тот же элемент. Это интересный факт о C/C++, но такой стиль ухудшает читаемость. Как сохранить размер массива при передаче?В современном C++ можно передать параметр по ссылке на массив: template<std::size_t N> void f(int (&a)[N]);. Для обычного кода удобнее использовать std::span (невладеющее представление непрерывной последовательности, C++20), std::array (фиксированный размер) или std::vector (динамический размер). Почему нет гарантии про служебные байты перед массивом?Реальные аллокаторы могут хранить метаданные в разных местах; конкретное расположение является внутренней деталью реализации. Обращение к p[-1] при p, полученном от new[], не становится допустимым из-за того, что там иногда видны «интересные числа». Современные альтернативы для функции-обратного вызоваКроме обычных указателей на функции, компаратором могут быть функциональный объект или лямбда. Они поддерживают передачу дополнительного состояния, а компилятор зачастую может инлайнить вызовы. Почему не стоит использовать ... в прикладном C++В C-подобных вариадических функциях типы дополнительных аргументов не проверяются по сигнатуре, а при использовании va_arg требуется знать фактически переданный тип с учётом стандартных продвижений. Современная альтернатива — вариадические шаблоны и безопасные обёртки.

dereference

Применение оператора * к указателю для получения выражения, обозначающего объект по адресу.

Лекция 7 · Взятие адреса и разыменование

Другие определения · 2

Унарный * предоставляет доступ к объекту по указателю.

*p = 5;

Лекция 7 · Взятие адреса и разыменование

Оператор *p, обращающийся к объекту, на который указывает p.

Лекция 8 · Справочник терминов

С

Garbage collection

Автоматическое определение недоступных динамических объектов и освобождение соответствующих ресурсов в языках/средах со сборщиком мусора.

Лекция 9 · +Необязательно, но полезноДополнительноРеальная память, сборка мусора, RAII, санитайзеры⌄ Четыре длительности хранения, а не три сегментаСтандарт C++ различает automatic, static, dynamic, а также thread storage duration для thread_local. Слова «стек», «куча» и «data» описывают распространённые механизмы реализации и раскладку исполняемого файла. Например, компилятор может хранить локальное число в регистре, вообще не выделяя для него слот в стеке. Реальные секции образа процессаРеализации обычно различают .text, .rodata, .data, .bss и другие секции. Стек каждого потока и динамические отображения могут находиться далеко друг от друга. Размер стека не зафиксирован стандартом и обычно индивидуален для потока. Откуда new получает память?Выражение new вызывает функцию выделения памяти (operator new), которая часто пользуется библиотечным аллокатором и лишь при необходимости запрашивает новые страницы у ОС. Каждый new не обязан делать отдельный системный вызов. Аналогично, delete не гарантирует немедленный возврат страниц ОС. Сборщик мусора и владение ресурсамиВ C++ по умолчанию нет обязательного сборщика мусора для new-объектов. Но современный стиль почти никогда не требует вручную писать new/delete для прикладного кода: std::vector хранит массив, std::unique_ptr владеет единичным объектом, а RAII связывает освобождение с деструктором владельца. Поиск ошибокПри запуске с AddressSanitizer часто обнаруживаются use-after-free, buffer overflow и некоторые утечки. Пример:Диагностика зависит от компилятора, ОС и конкретной ошибки; ни один санитайзер не доказывает полное отсутствие UB.

dictionary · map · std::map

Структура данных для хранения пар «ключ — значение» и поиска значения по ключу. Например, std::map хранит уникальные ключи в порядке, заданном компаратором.

std::map<std::string, int> counts;

Лекция 4 · Словари и множества

stream state

Поток хранит флаги ошибок. После неудачного чтения устанавливается failbit; при достижении конца ввода — eofbit; при серьёзной ошибке — badbit. Проверка потока в if истинна, когда не установлены failbit и badbit.

Лекция 1 · Ввод и вывод

reference

другое имя уже существующего объекта или функции. Запись T& r = x; связывает r с x без создания нового объекта типа T.

Лекция 8 · Ссылка — второе имя

Другие определения · 2

Другое имя уже существующего объекта или функции; объявление T&.

Лекция 8 · Ссылка — второе имя

Другое имя объекта или функции, которому ссылка связана при инициализации.

Лекция 10 · Константные ссылки

standard streams · std::cin · std::cout · std::cerr

Потоки ввода и вывода, предоставленные стандартной библиотекой: std::cin читает данные, std::cout выводит обычные результаты, std::cerr — сообщения об ошибках. Состояние входного потока нужно проверять.

std::cin >> count;
std::cout << count;

Лекция 1 · Ввод и вывод

call stack · Stack

механизм выполнения вложенных вызовов функций. Обычно организован как набор кадров, где есть локальные данные и информация для возврата к вызывающему коду.

Лекция 9 · Стек, области видимости и вызовы

Другие определения · 1

Структура исполнения вызовов, в которой обычно хранятся кадры функций и часть локальных данных.

Лекция 9 · Стек, области видимости и вызовы

string · std::string

Последовательность символов для хранения и обработки текста. В C++ std::string управляет памятью и предоставляет размер, поиск и изменение содержимого; строка может быть пустой.

std::string message = "Hello";

Лекция 4 · Строки

Другие определения · 1

изменяемая последовательность символов. Индексация начинается с нуля, а size() возвращает длину без завершающего нуля.

Лекция 4 · Строки

Т

lexeme · Token

Единица лексического анализа исходного текста.

identifier, ++, +

Лекция 2 · Токены и жадный разбор

Другие определения · 2

Минимальная единица, которую лексер распознал в исходном тексте: идентификатор, оператор, литерал или знак пунктуации.

Лекция 5 · Как компилятор понимает код

Значимая лексическая единица исходного текста.

имя, литерал, оператор, скобка

Лекция 5 · Как компилятор понимает код

entry point · main

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

int main() { return 0; }

Лекция 1 · Функция main: точка входа в программу

Другие определения · 1

Место, в которое среда выполнения передаёт управление для начала основной работы программы. В обычном приложении C++, запускаемом операционной системой, эту роль выполняет глобальная функция main.

Лекция 1 · Функция main: точка входа в программу

У

function pointer

значение, позволяющее обратиться к функции определённой сигнатуры через переменную. Например, bool (*cmp)(int,int).

Лекция 6 · Указатели на функции и сортировка

Другие определения · 2

Указатель, позволяющий вызвать функцию определённой сигнатуры.

Лекция 6 · Указатели на функции и сортировка

Переменная-указатель на функцию указанного набора параметров и типа результата.

Лекция 8 · Сложные объявления

RAII

Подход C++: владение ресурсом принадлежит объекту, а освобождение производится его деструктором.

Лекция 9 · Владение ресурсом и RAII

Другие определения · 2

Управление ресурсами через время жизни объектов-владельцев.

Лекция 8 · Висячие ссылки и время жизни

Управление ресурсами через конструкторы, деструкторы и время жизни объектов-владельцев.

Лекция 10 · Практика: файловые потоки для лабораторной

Memory leak

ситуация, когда программа оставляет выделение неосвобождённым, теряя возможность выполнить корректное освобождение. Особенно опасна в длительно работающих процессах.

Лекция 9 · Утечки памяти и ошибки освобождения

Другие определения · 1

Неосвобождённое выделение, к которому программа утратила доступ для корректного освобождения.

Лекция 9 · Утечки памяти и ошибки освобождения

Ф

file stream · std::ifstream · std::ofstream

Объект, связывающий операции ввода или вывода с файлом. std::ifstream предназначен для чтения, std::ofstream — для записи; после открытия и операций проверяют состояние потока.

std::ifstream input("numbers.txt");
std::ofstream output("result.txt");

Лекция 10 · Практика: файловые потоки для лабораторной

function

Вызываемая сущность с параметрами и типом результата; её тело описывает действия. Функция с типом результата int, double и т. п. возвращает значение, которое можно сохранить или использовать в выражении. Функция с типом void значения не возвращает — в учебных материалах её называют процедурой. В C++ процедура тоже является функцией.

int square(int value) {
    return value * value;
}
// Вызов square(4) возвращает 16.

Лекция 3 · Создание и вызов функций

Другие определения · 1

Именованный вызываемый блок поведения

int main() {}

Лекция 1 · Сущности языка

Х

Ц

Э

A

ASan

Инструмент для диагностики ряда ошибок обращения с памятью во время исполнения.

-fsanitize=address

Лекция 7 · +Необязательно, но полезноДополнительноВиртуальные адреса, сравнение указателей, касты, выравнивание и диагностика⌄Указатель не обязан быть обычным числомВо вводном объяснении мы считаем его числовым адресом. Стандарт C++ не требует, чтобы любой указатель хранился как простое целое число или чтобы все указатели занимали 8 байт. Отображение std::cout << p — форматирование указателя, а не арифметика над его числовым представлением.Сравнение указателейРавенство указателей осмысленно для подходящих совместимых типов, но < и > не стоит использовать для определения порядка независимых локальных объектов. Порядок для элементов одного массива соответствует порядку элементов. Для полного порядка указателей в ассоциативных структурах есть std::less.Выравнивание (alignment)Размещение объектов часто требует адресов, кратных определённым степеням двойки, но нельзя универсально утверждать, что int всегда стоит на адресе, кратном 4, или что double всегда на кратном 8: это зависит от платформы, типа и специальных способов размещения.Приведение указателей к целым числамreinterpret_cast разрешает низкоуровневые преобразования в некоторых случаях, но не делает случайный адрес допустимым. Для промежуточного целочисленного представления, когда оно поддерживается реализацией, используют std::uintptr_t из <cstdint>. Даже обратное преобразование адреса не означает, что по нему живёт нужный объект.Как находить ошибки памятиВо время разработки полезно включать предупреждения и AddressSanitizer / UndefinedBehaviorSanitizer. Это помогает находить выходы за границы и use-after-scope, хотя инструменты не доказывают отсутствие всех видов UB.

Разрешает реализации разные внутренние преобразования, пока наблюдаемое поведение корректной программы остаётся допустимым.

Лекция 5 · Почему UB меняет оптимизацию

Другие определения · 1

Оптимизатор свободен в допустимых изменениях внутренних действий при сохранении наблюдаемого поведения.

свёртка констант

Лекция 5 · Почему UB меняет оптимизацию

Таблица кодов из 128 символов: управляющих знаков, латинских букв, цифр и пунктуации. Символ цифры и числовое значение — разные вещи.

'5' - '0' == 5

Лекция 4 · Строки

C

F

Fallthrough in switch

Когда управление переходит из тела одной case в последующую без выхода из switch. Может быть намеренным; тогда уместен [[fallthrough]]; (C++17).

Лекция 2 · Условные конструкции

Другие определения · 1

Продолжение исполнения последующих case без break.

case 1: ...; case 2: ...;

Лекция 2 · Условные конструкции

I

Ill-formed, no diagnostic required

Нарушение правила языка, которое реализация не обязана диагностировать. Важно не рассчитывать на корректную работу даже после успешной сборки.

Лекция 5 · Другие категории поведения

Другие определения · 1

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

отдельные нарушения ODR

Лекция 5 · Другие категории поведения

L

Value category

Выражение, обозначающее идентифицируемый объект или функцию; не обязательно изменяемое.

x, ++x

Лекция 2 · Группировка операторов

Другие определения · 4

Выражение, обозначающее идентифицируемый объект или функцию; необязательно допускает присваивание.

x, *ptr, ++x

Лекция 3 · Присваивание и категории значений

Категория выражения, обычно обозначающего конкретный объект или функцию.

*p, x

Лекция 7 · Взятие адреса и разыменование

Категория выражения, способного обозначать объект или функцию, с идентичностью.

Лекция 8 · Ссылки в функциях

Категория значения выражения, обозначающего объект или функцию.

Лекция 10 · Константные ссылки

N

O

One Definition Rule

Набор требований к количеству и согласованности определений в одном translation unit и всей программе.

Обычная функция с внешним связыванием — одна definition в программе

Лекция 3 · Правило одного определения

Другие определения · 1

Ограничение на определения сущностей в программе; детали зависят от вида сущности.

разные несовместимые определения

Лекция 5 · Другие категории поведения

P

Pure rvalue · Value category

Выражение со значением, не обязательно обозначающее существующий именованный объект.

x+1, x++

Лекция 2 · Инкремент и декремент

Другие определения · 2

Категория выражения, вычисляющего значение или инициализирующего объект.

&x, x + 1

Лекция 7 · Взятие адреса и разыменование

Категория выражения-значения, например 5 или x++ для int.

Лекция 8 · Связывание и категории значений

R

S

sequencing · Sequencing relation

Отношение между вычислениями, которое требует, чтобы одно полностью предшествовало другому в рамках абстрактной машины C++. Не тождественно приоритету и ассоциативности.

Лекция 2 · Приоритет и порядок вычислений

Другие определения · 1

Отношение строгого предшествования одного вычисления другому.

a&&b: сначала a

Лекция 2 · Приоритет и порядок вычислений

T

U

undefined behavior

Стандарт C++ не предъявляет требований к последствиям выполнения такой программы. Это не обязательная ошибка компиляции или падение.

Чтение v[100] при v.size() == 3

Лекция 1 · Термины

Другие определения · 11

Нарушение правила, после которого стандарт языка не предъявляет требований к поведению программы.

i++ + i++

Лекция 2 · Термины

Стандарт не гарантирует никакого результата: программа может работать как угодно.

int x; int y=x;

Лекция 3 · Термины

Стандарт не устанавливает, что должна сделать программа в этой ситуации. Например, индексирование s[100] при длине строки 3 — не «гарантированная ошибка», а UB.

Лекция 4 · Строки

Никаких требований к поведению программы при недопустимой операции.

v[100] при v.size()==2

Лекция 4 · Строки

Отсутствие требований стандарта к поведению при выполнении определённого некорректного действия; результат нельзя обосновывать наблюдением одного запуска.

Лекция 5 · Неопределённое поведение

Стандарт C++ не устанавливает требований к поведению при нарушении определённого ограничения.

signed overflow, выход за границы

Лекция 5 · Неопределённое поведение

Стандарт C++ не устанавливает гарантий относительно поведения программы.

Лекция 6 · Справочник терминов

Ситуация, для которой стандарт не устанавливает требований к поведению программы.

*p после разрушения x

Лекция 7 · Термины

Ситуация без гарантий поведения по стандарту C++.

Лекция 8 · Справочник терминов

Ситуация, для которой стандарт C++ не налагает требований на поведение программы.

Лекция 9 · Утечки памяти и ошибки освобождения

Выполнение не имеет гарантий со стороны стандарта.

Лекция 10 · Справочник терминов

V

W

Диагностическое сообщение компилятора о потенциальной проблеме. Само по себе не требует отклонить программу.

Лекция 5 · Предупреждения компилятора

Другие определения · 1

Предположение компилятора о проблеме, не обязательно нарушающее правила языка.

if (x = 0)

Лекция 5 · Предупреждения компилятора