少し前に、2 項演算子を実装する通常のパターンmove
では、戻り値に final が必要だと言われました。
Matrix operator+(const Matrix &a, Matrix &&b) {
b += a;
return std::move(b);
}
しかし今ではreturn
、コンパイラが戻り値を一時的なものとして扱う可能性があるという特別な規則があり、これは必要ではなく、単純なものreturn b
で十分です。
しかし、繰り返しますが、この関数にb
は名前があるため、LValueです。これは、コンパイラがそれを一時的であると見なすのを妨げており、move
必要です。
これは、C++0x 標準の最新バージョンでも当てはまりますか? 上記のパターンを実装する必要がありますか?move