Еще одна std::move
почему std::move
предотвращает (неназванный) возврат-значение-оптимизацию? " вопрос:
Почему std :: move предотвращает RVO? объясняет, что стандарт специально требует, чтобы объявленный тип возвращаемой функции должен соответствовать типу выражения в операторе return
. Это объясняет поведение соответствующих компиляторов; однако это не объясняет обоснования ограничения.
Почему правила для RVO не делают исключение для случая, когда возвращаемый тип функции - T
а тип return
выражения - T&&
?
Я также осознаю, что реализация таких вещей в компиляторах не предоставляется бесплатно. Я предлагаю только исключить такое исключение, но не обязательно.
Я также знаю, что return std::move(...)
не требуется, поскольку С++ 11 уже требует, чтобы семантика перемещения использовалась, когда RVO не может быть применено. Тем не менее, почему бы не переносить явный запрос на оптимизацию, а не превращать его в пессимизацию?
(Помимо этого: почему return-value-optimization
и rvo
не являются синонимами?)