Сообщение Re[13]: Какая версия С++ ваша основная? от 13.01.2023 14:48
Изменено 13.01.2023 14:51 rg45
Re[13]: Какая версия С++ ваша основная?
Здравствуйте, Skorodum, Вы писали:
R>>Если же изменить тип результата make_foo на std::optional<Foo>, все эти возможности тут же пропадут.
S>Понял: мы же не может Foo в optional копировать. Спасибо.
Да, именно. Если резюмировать, то mandatory copy/move elision можно рассматривать как возможность расширения конструкторов. Сам конструктор содержит в себе только те действия, которые свойственны непосредственно классу объекта. А над этим мы можем еще построить массу разнообразных фабрик/загрузчиков/парсеров и т.п., в которых будут выполняться действия по созданию объекта, специфичные для мира, в котором этот объект создается.
R>>Если же изменить тип результата make_foo на std::optional<Foo>, все эти возможности тут же пропадут.
S>Понял: мы же не может Foo в optional копировать. Спасибо.
Да, именно. Если резюмировать, то mandatory copy/move elision можно рассматривать как возможность расширения конструкторов. Сам конструктор содержит в себе только те действия, которые свойственны непосредственно классу объекта. А над этим мы можем еще построить массу разнообразных фабрик/загрузчиков/парсеров и т.п., в которых будут выполняться действия по созданию объекта, специфичные для мира, в котором этот объект создается.
Re[13]: Какая версия С++ ваша основная?
Здравствуйте, Skorodum, Вы писали:
R>>Если же изменить тип результата make_foo на std::optional<Foo>, все эти возможности тут же пропадут.
S>Понял: мы же не может Foo в optional копировать. Спасибо.
Да, именно. Если резюмировать, то mandatory copy/move elision можно рассматривать как возможность расширения конструкторов. Сам конструктор содержит в себе только те действия, которые свойственны непосредственно классу объекта. А над этим мы можем еще построить массу разнообразных фабрик/загрузчиков/парсеров и т.п., в которых будут выполняться действия по созданию объекта, специфичные для мира, в котором этот объект создается, но в итоге всегда иметь под рукой простую и удобную процедуру создания объекта.
R>>Если же изменить тип результата make_foo на std::optional<Foo>, все эти возможности тут же пропадут.
S>Понял: мы же не может Foo в optional копировать. Спасибо.
Да, именно. Если резюмировать, то mandatory copy/move elision можно рассматривать как возможность расширения конструкторов. Сам конструктор содержит в себе только те действия, которые свойственны непосредственно классу объекта. А над этим мы можем еще построить массу разнообразных фабрик/загрузчиков/парсеров и т.п., в которых будут выполняться действия по созданию объекта, специфичные для мира, в котором этот объект создается, но в итоге всегда иметь под рукой простую и удобную процедуру создания объекта.