知识卡片
按值传参有边界
内容
对可拷贝、移动便宜且总要保存副本的形参,按值接收再 move 可减少重载,以额外移动换取实现简洁。若只是给已有对象赋值,可能失去存储复用优势;基类按值接收还可能切片。优化前应核对真实复制路径。
参考来源
- 位置:《Effective Modern C++》第8章《微调》,条款四十一:对于移动成本低且总是被拷贝的可拷贝形参,考虑按值传递(源文件:_epub-src/EPUB/text/ch009.xhtml)
- 结论依据:原文把低移动成本、必需副本与切片边界列为条件,指出构造副本和赋值复用成本不同。
- 原始内容:对于可拷贝,移动开销低,而且无条件被拷贝的形参,按值传递效率基本与按引用传递效率一致,而且易于实现,还生成更少的目标代码。 通过构造拷贝形参可能比通过赋值拷贝形参开销大的多。 按值传递会引起切片问题,所说不适合基类形参类型。