AvereIs (* i) .Membro meno efficienti rispetto i-> membro
struct Person {
string name;
};
Person* p = ...
Si supponga che non gli operatori sono sovraccarichi.
Quale è più efficiente (se presente)?
(*p).name
vs.p->name
Da qualche parte nella parte posteriore della mia testa ho sentito alcune campane, che l'operatore *
dereferenziazione può creare una copia temporanea di un oggetto; è vero?
Lo sfondo di questa domanda sono casi come questo:
Person& Person::someFunction(){
...
return *this;
}
e ho cominciato a chiedermi, se cambia il risultato al Person*
e l'ultima riga semplicemente return this
avrebbe fatto alcuna differenza (in termini di prestazioni)?
A questo punto dovresti preoccuparti molto della leggibilità, e dato che '->' è lo zucchero sintattico più comune, '(* i) .m' è disapprovato in molti posti. Solo se qualche profilo mostra che potrebbe esserci un problema relativo a questo, dovresti iniziare a preoccuparti della sua efficienza. – PlasmaHH
Mi aspetto che il compilatore produca esattamente lo stesso risultato. Puoi rispondere da solo, compilare entrambi i codici per l'assemblatore e controllare il codice prodotto. – bluehallu
Ho posto questa domanda a causa dello * sfondo * che ho descritto - molti operatori di base di solito restituiscono un riferimento a se stessi, e vedo molto spesso che restituiscono '* this'; –