RVO, std::move() i biblioteki współdzielone

RVO, std::move() i biblioteki współdzielone
bajos
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: UwUdź
  • Postów: 267
0

Witajcie,

Dziwiło mnie to zwracanie przez Qt bezpośrednio klas typu QByteArray, teraz już wiem, że to się rozchodzi o RVO, lecz mam kilka pytań.
Czytałem coś o tym całym RVO. Czy gdy używam bibliotek współdzielonych .so czy tam .dll to RVO jest możliwe? Oczywiście zakładam zgodność kompilatora binarki i biblioteki. Jeśli nie ma jednoznacznego returna tylko chowa się w instrukcjach warunkowych to RVO nie jest możliwe, ale wtedy lepsze wyjście to return std::move(someLocalVar) niż gołe return someLocalVar;?

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
2

Nawet jak chcesz korzystać z move semantics, to

Kopiuj
return std::move(someLocalVar);

jest gorsze niż

Kopiuj
return someLocalVar;

Standard gwarantuje, że move semantics będzie użyte (jeśli istnieje) w drugim przypadku jeśli RVO nie wypaliło.

bajos
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: UwUdź
  • Postów: 267
0

Pozostała jeszcze sprawa kodu w bibliotekach. Czy tam możliwe jest RVO?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.