C++中函数返回大型对象是效率的大敌。但是正如 EffectiveC++ 条款23 [ EC 23 ] 指出的, 有时候你一定得按值返回对象。譬如,你有一个稀疏矩阵类,它包含:
class Matrix{
std::vector< Elem > _data;
size_t _row, _col;
};
现在他的矩阵乘法函数就必须返回一个新的 SparseMatrix:
const Matrix operator* ( ) ( const Matrix& rhs ) {
Matrix mat( _row, rhs._col ); // MAT_1
//...
return mat; // MAT2 = MAT1
}
mat_l = mat_a * mat_b; // mat_l = MAT2
数数 return 处执行了多少次拷贝/赋值么? 最悲惨的情况是 —— 我们竟然需要两次无意义的拷贝!