MającCzy (* i) .member mniej wydajny niż i-> członek
struct Person {
string name;
};
Person* p = ...
Załóżmy, że żaden operatorzy są przeciążone.
Który z nich jest bardziej wydajny (jeśli występuje)?
(*p).name
vs.p->name
Gdzieś w głębi mojej głowie słyszę jakieś dźwięki dzwonów, że operator *
dereference może stworzyć tymczasową kopię obiektu; czy to prawda?
Tło tego pytania są przypadki tak:
Person& Person::someFunction(){
...
return *this;
}
i zacząłem się zastanawiać, czy zmieniając wynik Person*
i ostatni wiersz po prostu return this
byłoby żadnej różnicy (w wydajności)?
W tym momencie powinieneś dużo bardziej martwić się czytelnością, a ponieważ '->' jest najpopularniejszym cukrem syntaktycznym, '(* i) .m' jest mile widziane w wielu miejscach. Tylko jeśli jakiekolwiek profilowanie wykaże, że może być związany z tym problem, powinieneś zacząć martwić się jego efektywnością. – PlasmaHH
Spodziewam się, że kompilator wygeneruje dokładnie taki sam wynik. Możesz odpowiedzieć sam, skompilować oba kody do asemblera i sprawdzić wyprodukowany kod. – bluehallu
Zadałem to pytanie z powodu * tła * opisanego - wielu podstawowych operatorów zwykle zwraca odwołanie do siebie i widzę bardzo często, że zwracają '* to'; –