Re[10]: Про красивость работы с std::vector
От: rg45 СССР  
Дата: 15.03.25 13:07
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Из поля в локалку — перемещение. А вот return локалки уже сработал через rvo.


Никогда RVO не работал для "локалок". Для "локалок" МОЖЕТ сработать NRVO. А может не сработать. Это уже как компилятор решит. В отличие от RVO, NRVO не гарантируется, это всего лишь необязательная оптимизация. Но только это не относится к твоему случаю, так как у тебя "локалка" — это сслыка. И перемещение у тебя произошло как раз при выходе из функции, а вовсе не при взятии rvalue ссылки на поле. Само по себе взятие ссылки не влечё никакого перемещения. Перемещение происходит при ИСПОЛЬЗОВАНИИ rvalue ссылки. В данном случае при выполнении оператора return.

А для того, чтоб было так, как ты описал, тебе переменную temp нужно обявить как объектный тип, а не как ссылку: https://godbolt.org/z/4j7fjGcTe. Лишь с маленькой поправкой: не RVO, а NRVO. Правда, выхлоп программы от этого изменения никак не изменится Программа у тебя написана так, что позволяет определить, что перемещение произошло один раз. Но когда это произошло, этого не видно. А чтоб увидеть момент перемещения, можно слегка расширить отладочную печать: https://godbolt.org/z/d7fY5e8nh
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 15.03.2025 13:13 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.