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 处执行了多少次拷贝/赋值么? 最悲惨的情况是 —— 我们竟然需要两次无意义的拷贝!

本文探讨了C++中按值返回大型对象导致的效率问题,尤其是涉及矩阵类操作时的拷贝开销。通过介绍RVO(返回值优化)和C++0x的Move语义,提出手动实现Move语义的方法,如添加non-const成员函数`moveTo`,以减少不必要的拷贝,提高性能。文章提供了示例代码,展示了如何在矩阵乘法等操作中应用这些优化技巧。
最低0.47元/天 解锁文章
1483

被折叠的 条评论
为什么被折叠?



