C++仅传递只读参数时 应使用转发引用还是直接用const&?
结论
你当前的场景下直接使用const&就完全够用,不需要使用转发引用,你给出的示例代码可以正常工作。
原因
- 你所有调用链下游都只做参数的只读访问,不需要修改参数、也不需要转移参数的所有权。而const左值引用可以绑定任意值类别的对象,不管传入的是左值、const左值还是临时右值,都可以正常绑定,不会触发额外的对象拷贝,性能上没有损失。
- 你代码中的
std::is_same<char, Arg>::value类型判断逻辑也可以正常运行:模板参数Arg在const Arg&的推导规则下,会被推导为去掉顶层const的原始类型,刚好适配你做类型分支的需求,除非你有精确匹配参数cv限定符、值类别的特殊要求,否则不需要调整。
只有满足以下任一需求时,才需要替换为转发引用
- 下游函数存在区分左值/右值的重载(比如有接收右值引用用来移动资源的重载),需要保留原始参数的值类别传递给下游
- 下游逻辑需要修改传入的参数,或者需要接收非const的左值引用
- 你需要精确识别原始参数的cv限定符、值类别做逻辑分支
内容的提问来源于stack exchange,提问作者Voko
相关产品推荐
相关产品推荐

