IT-словарь › Программирование › Исключение копирования (copy elision)

Исключение копирования (copy elision)

Программирование Svenska → Обновлено: 2026-10-18

Компилятор вообще пропускает копирование или перемещение и создаёт объект сразу на его конечном месте. С C++17 главный случай — уже не оптимизация, а требование.

Возврат временного объекта — return T{...}; — начиная с C++17 не имеет права включать никакое копирование: объект инициализируется прямо в памяти вызывающей стороны. Правило сформулировано так, что работает даже для типов, которые нельзя ни копировать, ни перемещать, — поэтому фабрика может вернуть, скажем, std::mutex. Вариант с именованной локальной переменной, NRVO, остаётся необязательным, но выполняется любым вменяемым компилятором. Типичная ловушка — писать return std::move(x); в уверенности, что это помогает: получается обратное. Выражение перестаёт быть простым именем, NRVO отключается, и вы получаете гарантированное перемещение там, где не требовалось ничего.

← Назад к словарю