Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dlaczego konstruktor przenoszący nie może przyjmowac referencji do l-wartości

Ostatnio zmodyfikowano 2018-01-06 15:16
Autor Wiadomość
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ę :))
P-168323
latajacaryba
Temat założony przez niniejszego użytkownika
» 2018-01-06 13:45:48
To jeszcze jedno, dlaczego w takim przypadku:

C/C++
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().
P-168429
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
P-168432
1 « 2 »
Poprzednia strona Strona 2 z 2