Konstrukcja obiektu w instrukcji zwrotnej.

Konstrukcja obiektu w instrukcji zwrotnej.
Rafbeam
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 44
0

Jeżeli konstruuję nowy obiekt, by po chwili go zwrócić, to czy jest on dodatkowo kopiowany przez instrukcję zwrotną? Na przykład:

Kopiuj
std::string get_name() { // Wywołuje std::string(const char *cstr), a następnie std::string(const std::string &other)
    return std::string("Jan");
}

std::string get_last_name() { // Wywołuje jedynie std::string(const char *str)
    return "Kowalski";
}

Czy komentarze w powyższym kodzie oddają jego rzeczywiste działanie?

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
4

Teraz: nie oddają, kod jest funkcjonalnie identyczny.
Przed C++17: to zależy od kompilatora, (N)RVO pozwala kompilatorowi usunąć instrukcje kopiowania w takim przypadku i większość kompilatorów rzeczywiście to robi.

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.