Dlaczego konstruktor przenoszący nie może przyjmowac referencji do l-wartości
Ostatnio zmodyfikowano 2018-01-06 15:16
latajacaryba Temat założony przez niniejszego użytkownika |
» 2018-01-01 03:43:04 Wydaje mi się, że już rozumiem, poćwiczę jeszcze na kodzie, w razie wątpliwości wrócę do Was, tymczasem - dziękuję :)) |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2018-01-06 13:45:48 To jeszcze jedno, dlaczego w takim przypadku: T < int > f() { T < int > obj { 1, 2, 3 }; return obj; }
int main() { T < int > obj( f() ); }
nie jest wywoływany konstruktor przenoszący? W końcu mamy tu wartość tymczasową zwracaną przez f(). |
|
Monika90 |
» 2018-01-06 15:16:20 Konstruktor kopiujący lub przenoszący nie musi być wywołany w takiej sytuacji. To zjawisko nazywa się NRVO - Named Return Value Optimization. Funkcja f tworzy obiekt zwracany od razu w miejscu docelowym - obj w f i obj w main to ten sam obiekt, utworzony tylko raz. Tutaj więcej na ten temat: http://en.cppreference.com/w/cpp/language/copy_elision |
|
1 « 2 » |