~/cpp/glossary/
Справочник C++ 247 терминов из 10 лекций. Определения, примеры и ссылки на главы, в которых они встречаются.
Все А В Г Д Ё Ж З И К Л М Н О П Р С Т У Ф Х Ц Э A C F I L N O P R S T U V W Показано терминов: 247 из 247
Все определения доступны ниже. Найти слово на странице можно через поиск браузера.
А automatic storage · Automatic storage duration
Другие определения · 1 Локальные объекты без static/thread_local обычно существуют в рамках выполнения своего блока; место хранения может быть реализовано через стек.
Лекция 9 · Термины
Return address
Место продолжения выполнения программы после завершения вызванной функции.
Лекция 9 · Термины
Address · Object address
Другие определения · 1 Amortized complexity
default argument
Другие определения · 1 Pointer arithmetic
Другие определения · 1 Big O · O(f(n))
Описывает рост времени или памяти при увеличении размера входных данных.
O(1), O(log n), O(n)Лекция 4 · Термины
associativity · Operator associativity
Правило синтаксической группировки операторов равного приоритета. Не следует путать с математической ассоциативностью операции (a+b)+c = a+(b+c).
Лекция 2 · Группировка операторов
Другие определения · 1 В Top-level const
Другие определения · 1 else
Выбор выполняемых действий по условию. В конструкции if / else одна ветвь выполняется при истинном условии, другая — при ложном.
if (value > 0) { /* положительное */ } else { /* остальные */ }Лекция 2 · Условные конструкции
Address-of operator · address-of
Другие определения · 1 Dangling reference
Другие определения · 3 dangling pointer
Другие определения · 2 return statement · return
Завершение текущего вызова функции и передача результата, если её тип предусматривает возвращаемое значение. Инструкция return с выражением возвращает значение; return без выражения используется для досрочного выхода из void-функции.
int square(int value) { return value * value; }Лекция 3 · Создание и вызов функций
return by reference
функция с возвращаемым типом T&, результат которой обозначает уже существующий объект. Такой результат обычно является lvalue, поэтому ему можно присвоить значение.
Лекция 8 · Возврат по ссылке
Другие определения · 1 temporary
Runtime
Период, когда уже собранная программа запущена и выполняет действия: читает данные, вызывает функции, вычисляет значения и выводит результат. Compile time — время сборки, когда компилятор проверяет код и переводит его в исполняемую форму.
Лекция 1 · Глобальная область, подключения и runtime
Другие определения · 3 Этап, на котором программа уже исполняется. int x = 5; связывает имя с типом при компиляции; значение x изменяется во время выполнения.
Лекция 1 · Типизация
object lifetime
Другие определения · 2 Промежуток, в течение которого объект существует согласно правилам C++. У автоматических локальных объектов срок обычно заканчивается при выходе из соответствующего блока.
Лекция 8 · Висячие ссылки и время жизни
in-out parameter
in-parameter
Overload resolution
Другие определения · 1 new[]
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
Другие определения · 2 out-of-bounds
Г global namespace scope
Область вне тел функций, классов и явно объявленных пространств имён. Здесь можно объявлять переменные, функции, типы и пространства имён. Имя, объявленное здесь, доступно в допустимых местах после объявления, если его не скрывает другое имя.
Лекция 1 · Глобальная область, подключения и runtime
Д binary mode · std::ios::binary
pointer-to-pointer
declarator
часть объявления, которая описывает имя и форму типа: указатель, ссылка, массив или функция. Скобки определяют порядок связывания этих конструкций.
Лекция 8 · Сложные объявления
Другие определения · 1 Diagnostics
Другие определения · 1 Сообщения компилятора и инструментов о возможных или обязательных ошибках, с указанием места и часто предлагаемого исправления.
Лекция 5 · Практика диагностики
dynamic array · std::vector
Последовательность непрерывно расположенных элементов, размер которой может изменяться во время выполнения. В C++ стандартный контейнер std::vector управляет такой последовательностью. Размер и вместимость различаются; перевыделение памяти может сделать старые адреса элементов недействительными.
std::vector<int> values{2, 4, 6};Лекция 4 · Динамические массивы
Другие определения · 3 Контейнер, самостоятельно управляющий выделением и освобождением своей памяти.
Лекция 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
Другие определения · 1 Память для объекта запрашивается во время работы программы и освобождается отдельным действием.
Лекция 9 · Термины
preprocessor directive · #include
std::strlen
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.
read-only access
Ё capacity()
Количество элементов, которое вектор способен разместить без нового выделения памяти.
v.capacity()Лекция 4 · Строки
Ж maximal munch
Лексер выбирает максимально длинную последовательность символов, которая образует допустимый токен. Поэтому слитная запись нескольких + не обязательно означает ожидаемые бинарные и унарные операторы.
Лекция 2 · Токены и жадный разбор
Maximal munch
З Implementation-defined Behavior
Другие определения · 1 closure
Вызываемый объект лямбды вместе с её захваченным окружением. Захват по значению сохраняет собственную копию настройки, которую лямбда использует при последующих вызовах.
Лекция 3 · Создание и вызов функций
decay
И Identifier
Другие определения · 1 index
Initialization
Другие определения · 3 Получение объектом начального состояния при создании. int x = 5; определяет и инициализирует переменную. int x; тоже определяет переменную, но локальный int остаётся без заданного значения.
Лекция 3 · Объявления и определения
array initialization
statement
Другие определения · 4 Грамматическая единица тела функции: объявление, выражение-инструкция, блок, условие или цикл.
x += 1; / if (x) {}Лекция 1 · Сущности языка
break statement · break
Завершает ближайший охватывающий цикл или switch. Выполнение продолжается после завершённой конструкции.
if (found) break;Лекция 2 · Циклы и переходы
continue statement · continue
Переходит к следующему повторению ближайшего цикла. В for перед новой проверкой условия выполняется выражение шага.
if (value == 0) continue;Лекция 2 · Циклы и переходы
Exception
Другие определения · 1 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 К Stack frame
Другие определения · 1 lvalue · prvalue · xvalue
Упрощение «lvalue — можно писать слева от =» удобно на старте, но неточно: существуют const-lvalue, которым присваивать нельзя. Категории описывают свойства выражений, а не просто место относительно знака равно.
Лекция 3 · Присваивание и категории значений
value category
comparator
Другие определения · 1 Linking
end of file · EOF · eof()
Состояние потока, устанавливаемое после операции, обнаружившей конец входных данных. Предварительная проверка eof() не гарантирует успешность следующего чтения.
while (input >> value) { /* обрабатываем прочитанное */ }Лекция 10 · Практика: файловые потоки для лабораторной
const correctness
const reference
Другие определения · 1 const
Другие определения · 1 квалификатор типа, ограничивающий допустимые операции модификации через соответствующее выражение. const int и int — разные cv-квалифицированные формы типа.
Лекция 10 · Что означает const
const object
const pointer
const pointer to const
Container
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 требуется знать фактически переданный тип с учётом стандартных продвижений. Современная альтернатива — вариадические шаблоны и безопасные обёртки.
std::vector
copy
copy
Short-circuit evaluation
array parameter adjustment
Heap
Л Lexical analyzer
Literal
Другие определения · 2 Запись конкретного значения прямо в программе: 5, 3.14, 'A', "abc". Вид записи влияет на тип значения.
Лекция 1 · Целые числа
static local
Другие определения · 1 lambda expression
Выражение, создающее вызываемый объект с описанным поведением. У самой лямбды нет обычного имени функции, но её можно сохранить в переменную и вызывать через неё: auto twice = [](int value) { return value * 2; };.
Лекция 3 · Создание и вызов функций
М significand · exponent
Значащая часть хранит точные цифры, а показатель степени определяет масштаб. Поэтому расстояние между представимыми числами растёт с увеличением модуля числа.
Лекция 1 · Вещественные числа
array
объект, состоящий из фиксированного числа элементов одного типа, расположенных подряд в памяти. Длина входит в тип массива.
Лекция 6 · Обычные массивы
Другие определения · 1 VLA
Другие определения · 1 array of references
array of pointers
delete[]
multidimensional array
Правила добавления const на вложенных уровнях указателей; для допустимого преобразования могут потребоваться дополнительные квалификаторы на промежуточных уровнях.
Лекция 10 · Const на двух уровнях
nested pointer
set · std::set
Набор уникальных значений. Повторное добавление того же значения не создаёт второй элемент. std::set хранит значения в порядке, заданном компаратором.
std::set<int> values{1, 1, 2}; // два разных элементаЛекция 4 · Словари и множества
Н ambiguous call
Contiguous storage
Unspecified Behavior
Другие определения · 1 Unspecified order
Стандарт допускает несколько вариантов порядка, каждый из которых может давать разные результаты.
f(a(), b())Лекция 2 · Термины
implicit conversion
Low-level const
Другие определения · 1 null terminator
null-terminated string
О reference_wrapper
Scope
data · Data segment
Собирательное название областей для данных со статической длительностью хранения (в реальности это несколько секций, например .data и .bss).
Лекция 9 · Термины
Pointer-based swap
Функция получает адреса и изменяет исходные объекты через разыменование.
swap_by_ptr(&x, &y)Лекция 7 · Термины
value-initialization
Object
Другие определения · 2 Область хранения, имеющая тип и время жизни. Переменная — именованный объект или ссылка; временные объекты также существуют.
int x = 5;Лекция 1 · Сущности языка
Declaration
Вводит имя и сообщает компилятору, что за сущность обозначается этим именем. void f(int); объявляет функцию, но не задаёт её тело.
Лекция 1 · Сущности языка
Другие определения · 2 operator
Comma operator
Бинарное выражение (e1, e2): гарантирует вычисление e1 перед e2 и имеет результат и категорию значения e2. В списках аргументов запятые служат разделителями, а не этим оператором.
Лекция 2 · Запятая и sizeof
Другие определения · 1 operator[]
sizeof · sizeof operator
Другие определения · 2 Специальный оператор языка, возвращающий размер типа / объекта в единицах sizeof(char). Для обычных типов C++ не вычисляет само выражение-операнд sizeof(expr).
Лекция 2 · Запятая и sizeof
delete-expression
Уничтожает объект, ранее созданный соответствующим new, и освобождает выделенную память.
Лекция 9 · Термины
new-expression
Создаёт объект в динамической памяти, инициализирует его и возвращает указатель.
Лекция 9 · Термины
Definition
Даёт определение сущности. void f(int x) {} одновременно объявляет и определяет функцию. Всякое определение — объявление, но не наоборот.
Лекция 1 · Сущности языка
Другие определения · 2 Объявление, дающее полное описание сущности либо создающее её, в зависимости от вида сущности.
int x = 5; / void f() {}Лекция 1 · Сущности языка
Optimization
Другие определения · 1 CE · compile error
linker error
П Тип T& в списке параметров позволяет изменять объект, переданный аргументом. Для чтения крупных объектов обычно используют const T& (подробнее — в «Дополнительно»).
Лекция 8 · Ссылки в функциях
new[] / delete[]
Function overloading
function overloading
function overloading
Другие определения · 1 pass by value
Другие определения · 4 создаёт отдельный параметр функции. Передача по ссылке позволяет функции обращаться к исходному объекту вызывающего кода без ручных & и *.
Лекция 8 · Ссылки в функциях
pass by reference
Другие определения · 2 switch statement · switch
Конструкция выбора по значению выражения. В C++ switch сопоставляет значение с метками case; default используется для остальных значений. Инструкция break завершает выполнение switch.
switch (choice) { case 1: break; default: break; }Лекция 2 · Условные конструкции
Variable
Другие определения · 1 Объявленная сущность с именем; для привычных переменных типа int это именованный объект, содержимое которого можно менять.
int x = 5; x = 9;Лекция 1 · Сущности языка
Stack overflow
Исчерпание доступного пространства стека. В типичных системах проявляется аварийным завершением, но точное поведение зависит от платформы и настройки исполнения.
Лекция 9 · Почему переполняется стек
Другие определения · 1 Side effect
Double delete
Повторное освобождение одного динамического объекта через указатель: UB.
Лекция 9 · Термины
Promotion
Вид стандартного преобразования, например char → int либо float → double в определённых контекстах.
char c='a'; int n=c+1;Лекция 1 · Термины
Другие определения · 1 array parameter adjustment
file position · tellg() · seekg()
Место в потоке, откуда производится чтение или куда выполняется запись. Позиция потока и номер числовой записи — разные понятия; номер записи считают отдельным счётчиком.
auto position = input.tellg();
input.clear();
input.seekg(0);Лекция 10 · Практика: файловые потоки для лабораторной
full-expression
half-open range
Order of evaluation
postfix increment
Увеличивает переменную, а выражение даёт прежнее значение как prvalue для int.
x++Лекция 2 · Термины
Другие определения · 1 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
Другие определения · 1 Array-to-pointer conversion
Другие определения · 1 неявное преобразование выражения типа «массив из N элементов T» в указатель T* на его начальный элемент в соответствующем контексте.
Лекция 6 · Массив и указатель
implicit conversion
При несовпадении ожидаемого и фактического типов компилятор иногда вставляет преобразование. Оно может быть безопасным (char → int) или с потерей информации (double → int).
Лекция 1 · Типизация
function-to-pointer conversion
lvalue-to-rvalue
prefix increment
Другие определения · 1 Operator precedence
assignment
lifetime extension
namespace
Другие определения · 2 procedure
Учебное название функции с типом результата void. Она выполняет действие, например выводит сообщение или изменяет данные через параметры, но не возвращает значение вызывающему коду. Главное отличие от функции с результатом: вызов процедуры нельзя использовать там, где нужно число или другое значение. Отдельной конструкции procedure в C++ нет — используется обычная void-функция.
void printMessage() {
std::cout << "Готово\n";
}
// Вызов printMessage() выполняет вывод, но не возвращает значение.Лекция 3 · Создание и вызов функций
Другие определения · 1 Учебное название функции с типом результата void. Она выполняет действие, но не возвращает значение вызывающему коду. В C++ отдельной конструкции procedure нет: процедура записывается как обычная функция.
Лекция 3 · Создание и вызов функций
alias
Type alias
Конструкция using Int = long long; задаёт ещё одно имя того же типа, не создавая нового отдельного типа. typedef позволяет делать подобное, но хуже читается для сложных типов и не поддерживает alias templates.
Лекция 3 · Пространства имён и using
Другие определения · 1 Р size()
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
Другие определения · 2 append mode · std::ios::app
Recursion
С Sanitizer
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.
free store
Область или механизм динамического выделения памяти. «Куча» — распространённая реализация, а не отдельная категория хранения в стандарте.
Лекция 9 · Термины
reference initialization · binding
Другие определения · 1 text · Text segment
Область образа процесса, где обычно расположен исполняемый машинный код.
Лекция 9 · Термины
Semantics
move semantics
semantic error
signature
Syntax
dictionary · map · std::map
Структура данных для хранения пар «ключ — значение» и поиска значения по ключу. Например, std::map хранит уникальные ключи в порядке, заданном компаратором.
std::map<std::string, int> counts;Лекция 4 · Словари и множества
shadowing
stream state
Поток хранит флаги ошибок. После неудачного чтения устанавливается failbit; при достижении конца ввода — eofbit; при серьёзной ошибке — badbit. Проверка потока в if истинна, когда не установлены failbit и badbit.
Лекция 1 · Ввод и вывод
aggregate initialization
int a[5]{2, 3}; задаёт первые два элемента, а остальные обнуляет. Размер можно вывести из списка: int a[]{2,3,4};.
Лекция 6 · Обычные массивы
Другие определения · 1 reference
Другие определения · 2 reference to array
Другие определения · 1 reference to pointer
reference to function
standard streams · std::cin · std::cout · std::cerr
Потоки ввода и вывода, предоставленные стандартной библиотекой: std::cin читает данные, std::cout выводит обычные результаты, std::cerr — сообщения об ошибках. Состояние входного потока нужно проверять.
std::cin >> count;
std::cout << count;Лекция 1 · Ввод и вывод
тип каждой переменной известен при компиляции и не меняется на протяжении существования этой переменной.
Лекция 1 · Типизация
static storage · Static storage duration
Другие определения · 1 call stack · Stack
Другие определения · 1 strict weak ordering
string · std::string
Последовательность символов для хранения и обработки текста. В C++ std::string управляет памятью и предоставляет размер, поиск и изменение содержимого; строка может быть пустой.
std::string message = "Hello";Лекция 4 · Строки
Другие определения · 1 изменяемая последовательность символов. Индексация начинается с нуля, а size() возвращает длину без завершающего нуля.
Лекция 4 · Строки
string literal
Другие определения · 1 string stream · std::istringstream
Т conditional operator ?:
Встроенный оператор выбора одного из двух выражений. Другой операнд не вычисляется, что удобно для безопасного обращения к значениям, зависящего от условия.
Лекция 2 · Условный оператор
Type
Другие определения · 1 Определяет множество возможных значений объекта, допустимые операции и правила интерпретации данных.
int, double, bool, std::stringЛекция 1 · Сущности языка
lexeme · Token
Другие определения · 2 entry point · main
Функция, с которой начинается основная работа обычной C++-программы после начальной подготовки среды выполнения. В C++ это main; возвращаемое ею целое число служит кодом завершения.
int main() { return 0; }Лекция 1 · Функция main: точка входа в программу
Другие определения · 1 Место, в которое среда выполнения передаёт управление для начала основной работы программы. В обычном приложении C++, запускаемом операционной системой, эту роль выполняет глобальная функция main.
Лекция 1 · Функция main: точка входа в программу
У delete[]
pointer
Другие определения · 1 pointer to const
pointer-to-array · pointer to array
Другие определения · 1 pointer to reference
Pointer to pointer
function pointer
Другие определения · 2 Stack pointer
Pointee
Control flow
Последовательность выполнения инструкций и ветвления программы.
if, for, switchЛекция 2 · Термины
RAII
Другие определения · 2 control-flow statement
Conditional operator
Memory leak
Другие определения · 1 Ф 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 Ц хранят дискретные значения. Размер большинства встроенных целых типов зависит от платформы. В таблице ниже указаны распространённые значения.
Лекция 1 · Целые числа
post-test loop · do while
Цикл, проверяющий условие после тела. Тело выполняется хотя бы один раз. В C++ это do while; после условия нужна точка с запятой.
do { ++attempts; } while (attempts < limit);Лекция 2 · Циклы и переходы
pre-test loop · while
Цикл, проверяющий условие перед каждым выполнением тела. Если условие сразу ложно, тело не выполняется ни разу. В C++ так работает while.
while (remaining > 0) { --remaining; }Лекция 2 · Циклы и переходы
count-controlled loop · for
Повторение действий, управляемое изменением счётчика. Обычно записывается через for с инициализацией, условием продолжения и шагом.
for (int i = 0; i < count; ++i) { /* тело */ }Лекция 2 · Циклы и переходы
A std::abort
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.
Другие определения · 1 Таблица кодов из 128 символов: управляющих знаков, латинских букв, цифр и пунктуации. Символ цифры и числовое значение — разные вещи.
'5' - '0' == 5Лекция 4 · Строки
C variadic function
C-string
Compilation error
cv-qualification
F Fallthrough in switch
Когда управление переходит из тела одной case в последующую без выхода из switch. Может быть намеренным; тогда уместен [[fallthrough]]; (C++17).
Лекция 2 · Условные конструкции
Другие определения · 1 First in — first out
I Ill-formed, no diagnostic required
Другие определения · 1 L Last in — first out
Value category
Другие определения · 4 Когда требуется именно значение, C++ может неявно прочитать lvalue-объект. В int y = x; читается значение x и инициализируется новый объект y.
Лекция 8 · Возврат по ссылке
O One Definition Rule
Набор требований к количеству и согласованности определений в одном translation unit и всей программе.
Обычная функция с внешним связыванием — одна definition в программеЛекция 3 · Правило одного определения
Другие определения · 1 Past-the-end pointer
Допустимый указатель сразу за последним элементом, который нельзя разыменовывать.
v.data() + v.size()Лекция 7 · Термины
P Pure rvalue · Value category
Другие определения · 2 R Runtime error
Другие определения · 1 rvalue reference
S Formatted input
SIGSEGV
SIGSEGV
sequencing · Sequencing relation
Отношение между вычислениями, которое требует, чтобы одно полностью предшествовало другому в рамках абстрактной машины C++. Не тождественно приоритету и ассоциативности.
Лекция 2 · Приоритет и порядок вычислений
Другие определения · 1 Floating-point exception signal
Null pointer type
Pointer difference type
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 · Неопределённое поведение
Ситуация, для которой стандарт не устанавливает требований к поведению программы.
*p после разрушения xЛекция 7 · Термины
directive / alias
W Другие определения · 1 -Werror