オーバーロードされた operator+= メンバー関数の存在を前提として、operator+ の標準的な形式は次のようになると想定していました。
const T operator+(const T& lhs, const T& rhs)
{
return T(lhs) +=rhs;
}
しかし、これも機能することが指摘されました。
const T operator+ (T lhs, const T& rhs)
{
return lhs+=rhs;
}
本質的に、このフォームは一時オブジェクトの作成を実装の本体から関数呼び出しに転送します。
2 つのパラメーターの型が異なるのは少しぎこちなく思えますが、2 番目の形式に問題はありますか? どちらかを優先する理由はありますか?