知识卡片

完美转发会失败

普通读书笔记卡 · 1427

内容

完美转发会因类型推导、链接定义或引用绑定限制失败。裸花括号、0/NULL、仅声明的整型静态常量、重载函数名和位域分别触发不同边界。定位时先区分编译推导失败、链接错误与语义偏差,再用显式类型、副本或补定义解决。

参考来源

- 位置:《Effective Modern C++》第5章《右值引用,移动语义,完美转发》,条款三十:熟悉完美转发失败的情况(源文件:_epub-src/EPUB/text/ch006.xhtml) - 结论依据:原文逐一解释列表、静态常量、重载名字和位域,失败原因并不都等于无法推导类型。 - 原始内容:当模板类型推导失败或者推导出错误类型,完美转发会失败。 导致完美转发失败的实参种类有花括号初始化,作为空指针的 0 或者 NULL ,仅有声明的整型 static const 数据成员,模板和重载函数的名字,位域。