知识卡片
别重载通用引用
内容
通用引用重载会通过精确匹配抢走本来期望的复制或整型重载,完美转发构造甚至会拦截派生类构造路径。灵活接口要限定候选集合;否则报错可能深入到模板内部,远离调用者的真实意图。替代方案见[[约束转发入口]]。
参考来源
- 位置:《Effective Modern C++》第5章《右值引用,移动语义,完美转发》,条款二十六:避免在通用引用上重载(源文件:_epub-src/EPUB/text/ch006.xhtml)
- 结论依据:原文用构造与整数重载说明通用引用可能比预期匹配更好,破坏原有重载分工。
- 原始内容:对通用引用形参的函数进行重载,通用引用函数的调用机会几乎总会比你期望的多得多。 完美转发构造函数是糟糕的实现,因为对于non- const 左值,它们比拷贝构造函数而更匹配,而且会劫持派生类对于基类的拷贝和移动构造函数的调用。