Nie zwracaj według wartości jako const
. Kiedy zwrócisz cokolwiek, co mówisz, "Teraz dzwoni, to jest teraz twoje, rób to, co chcesz". Jeśli osoba dzwoniąca z twojej metody nie chce jej modyfikować, może zapisać ją jako const
, jak pokazano powyżej: const A a = getA();
. Ale ty (jako metoda) nie powinieneś mówić rozmówcy, czy jego obiekty są czy nie (twoja wartość zwracana to jego obiekt).
Jeśli wartość zwracana jest const
, nie można z niej wstawić move
do nowego obiektu, więc konstruktor ruchu nie jest nawet brany pod uwagę. Jedyną opcją jest kopiowanie, które również nie działa, ponieważ w twoim przypadku jest to obiekt niekodowany. Jeśli powrót nie jest stały, możesz przejść od niego i uzyskać pożądane zachowanie.
To jest dobra ogólna rada: zwracając wartość, nie należy ustawiać wartości const. Zwykle ci nie pomoże. –