Es fiel mir gerade ein, dass operator+
& co auf this
für rvalues arbeiten kann; das heißt, eine Klasse gegeben C
, dann ist es möglich, dies zu tun:Ist es sinnvoll, Operatoren mit Ref-Qualifier zu überladen, um Provisorien zu vermeiden?
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);
}
};
Diese Kopien durch einfaches Modifizieren temporäre Werte an Ort und Stelle verhindern würde.
Würde das so funktionieren, wie ich es erwarte? Ist es eine vernünftige Optimierung oder würde der Compiler genauso schnellen Code erstellen?
Mit der ersten Version können Sie bereits Kopier-Ellision bekommen. Ich bin mir also nicht sicher, ob der zweite gebraucht wird (wenn es überhaupt funktioniert, fühle ich mich, als würde es dich in den Arsch beißen, aber ich könnte mich irren) – Borgleader
Ja, ich habe das Gefühl, dass eine Kopie zu ähnlicher Leistung führen könnte. .. Aber ich sehe nicht, wie meine Version mich noch in den Arsch beißen könnte. (Ich bin mir aber nicht sicher, daher die Frage.) –
Object Lebensdauer Probleme. 'C && c = C() - einige_C;' und 'c' baumelt. –