Sprawdzam projekt cppcheckiem i dostałem wskazówkę, żeby pętlę zamienić na std::transform. Napisałem sobie test, żeby zobaczyć jak będzie zachowywał się obiekt po takiej zmianie i widzę, że przy każdym obiekcie wywoływany jest konstruktor przenoszący. Robię coś źle, czy po prostu std::transform w takim prostym przypadku wykorzystuje więcej zasobów od pętli?
@dupasmoka: Ale wtedy robię move z pierwszego kontenera? Załóżmy, że chcę zrobić kopię za pomocą std::transform. Jak użyłbym tej zakomentowanej pętli to mam po prostu trzy konstruktory kopiujące co jest moim celem. Jeżeli się nie da tak zrobić transformem to czy jest sens go użyć?
@Gerax9: lambda by default zwraca przez wartość, zatem zwracasz w tej lambdzie kopię. dorzuć tam ->decltype(auto) w lambdzie, to będzie referencję zwracać i nie będzie przenoszenia
@Gerax9: jednakże w korzystając z transforma chcemy tak naprawę tworzyć nowe obiekty(czyli zwracać przez wartość(rvo) i przenosić), a nie zwracać referencje do istniejących, więc zastanów się co tak naprawdę chcesz zrobić. chyba, że zwracasz referencję do membera, to ok
Napisałem sobie test, żeby zobaczyć jak będzie zachowywał się obiekt po takiej zmianie i widzę, że przy każdym obiekcie wywoływany jest konstruktor przenoszący. Robię coś źle, czy po prostu std::transform w takim prostym przypadku wykorzystuje więcej zasobów od pętli?
Co byście użyli w takiej sytuacji?
https://godbolt.org/z/7fMbPabEo
#cpp
std::copy.->decltype(auto)w lambdzie, to będzie referencję zwracać i nie będzie przenoszenia@MamCieNaHita: Tego brakowało, dzięki.