使用 std::forward:精确转发参数
将参数传递给 C 中的函数时,考虑使用的引用修饰符至关重要定义函数参数。 std::forward 的使用提供了处理参数引用的灵活性。
std::forward 的优点
在 C 0x 中,std::forward 用于显式地将参数移至函数。当函数接受通用引用 (T&&) 并且您想要保留原始引用类型(无论是左值引用还是右值引用)时,这很有用。
使用 &&在参数声明中
&&的使用in 参数声明表示仅允许右值引用。然而,这并不意味着可以使用 && 来运行。参数只能用临时参数调用。在提供的示例中,可以使用任何类型的参数调用 foo,包括左值。
模板函数中的转发参数
在模板函数的上下文中,这是必不可少的将参数传递给模板内的另一个函数时使用 std::forward。这可以确保将正确类型的参数转发到嵌套函数,无论它是左值还是右值。例如:
template
void doSomething(Params... args) {
doSomethingElse(args...);
}
这不会按预期工作,因为 doSomethingElse 没有 &&参数。相反,应使用以下代码:
template
void doSomething(Params&&... args) {
doSomethingElse(std::forward(args)...);
}
参数的多次转发
通常不建议在同一函数中多次转发参数。 std::forward 将左值转换为右值引用,再次转发它会导致另一次转换,这可能会导致内存无效。例如,不应使用以下代码:
template
void doSomething(Params&&... args) {
doSomethingElse(std::forward(args)...);
doSomethingWeird(std::forward(args)...);
}
总之, std::forward 在确保 C 中参数精确转发方面发挥着关键作用。它有助于维护预期的引用类型,并实现具有不同引用限定符的函数之间的无缝互操作,特别是在模板上下文中。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3