operator+
& coは、右辺値に対してthis
で操作できます。すなわち、クラスC
与えられ、それがこれを行うことが可能です:臨界を防ぐために演算子をref-qualifierでオーバーロードすることは妥当ですか?
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);
}
};
これは、単にその場で一時的な値を変更することで、コピーを防止するであろう。
これは私の予想どおりに動作しますか?これは妥当な最適化ですか、コンパイラは同じように高速なコードを作成しますか?
最初のバージョンでは、すでにellisionコピーを取得できます。だから、私は2番目のものが必要であるかどうか分からない。(それはまったく動作すれば、お尻を噛むように感じるが、間違っている可能性がある) – Borgleader
ええ、コピーエリージョンが同様の性能をもたらすかもしれないと感じている。 ..しかし、私のバージョンでは、私のお尻が私のお尻をどうやって噛むのかは分かりません。 (私は確信していないので、質問です。) –
オブジェクトの生涯の問題です。 'C && c = C() - some_C;'と 'c'はぶら下がっています。 –