C++23: неявный move в return, std::move больше не нужен

Move in C++ without a std:move

C++23: неявный move в return, std::move больше не нужен

Андреас Фертиг, автор блога о C++, объясняет, как C++23 делает неявный move при возврате rvalue-ссылок из функций, что позволяет избежать ручного вызова std::move. Он приводит примеры, где до C++20 требовался явный move или происходила копия, а теперь компилятор сам выполняет move. Это дополняет его прежний совет использовать std::move редко, обеспечивая лучшую производительность по умолчанию.

Теперь вы можете следовать моему правилу использовать std::move редко еще чаще!
  1. fluoridation

    К сожалению, я не думаю, что можно избежать понимания семантики значений, чтобы получить правильное и/или производительное поведение.

  2. sprocketz

    Что делает NVRO настолько более сложным для реализации? Почему они не могли сделать его обязательным, как RVO? Компиляторы буквально просто обрабатывают отдельный случай простого return-выражения с прямой конструкцией или что-то в этом роде?

  3. tom_

    Если автор читает: оба сложных примера одинаковы.

Ещё за этот день

2026-09-02