Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpIzEl 377 of 696 menu
◀ ▶

Пропуск копирования при возврате в C++

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

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

#include <iostream> struct Banner { Banner() = default; Banner(const Banner&) { std::cout << "copy\n"; } }; Banner make_banner() { Banner local; return local; } int main() { Banner item = make_banner(); return 0; }

Строка "copy" не появляется: временный объект не копируют в item отдельным вызовом конструктора копирования. Так стандарт избегает лишней работы при возврате по значению.

Объявите struct Cell с копирующим конструктором, печатающим "copy". Напишите функцию, возвращающую локальный Cell, и сохраните результат в переменную в main. Убедитесь, что сообщение не выводится.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить