E 'appena venuto in mente che operator+
& co può operare su this
per rvalues; cioè in una classe C
, è possibile farlo:È ragionevole sovraccaricare gli operatori in base al qualificatore di riferimento per impedire i provvisori?
class C {
// ...
C operator-(const C& rhs) const & {
C result = *this;
result -= rhs;
return result;
}
C&& operator-(const C& rhs) && {
*this -= rhs;
return std::move(*this);
}
};
Ciò impedirebbe copie semplicemente modificando i valori temporanei sul posto.
Sarebbe questo eseguire come mi aspetto? È una ottimizzazione ragionevole o il compilatore potrebbe creare un codice altrettanto veloce?
Con la prima versione si può già ottenere copia ellision. Quindi non sono sicuro che sia necessario il secondo (se funziona, mi sento come se ti mordesse il culo ma potrei sbagliarmi) – Borgleader
Sì, ho la sensazione che la copia di elision potrebbe portare a prestazioni simili. .. Ma non vedo come la mia versione potrebbe mordermi ancora nel culo. (Non sono sicuro, quindi, la domanda.) –
Problemi di durata dell'oggetto. 'C && c = C() - some_C;' e 'c' sta penzolando. –