gpt4 book ai didi

c++ - 调用时 std::forward 的效用

转载 作者:行者123 更新时间:2023-11-30 03:54:15 30 4
gpt4 key购买 nike

我正在编写类似于众所周知的 tuple_apply 的函数,它以函数的右值引用作为参数。在我对网络的研究中,我遇到了以下两个调用:

template <
typename Func,
/* stuff */
>
void myfunction(Func && func, /* stuff */)
{
std::forward<Func>(func)(/* stuff */); // use of std::forward before call
func(/* stuff */); // direct call
}

调用 std::forward 真的有用吗?如果是,为什么?

多谢指教!

最佳答案

在大多数情况下,这两个选项之间没有区别。但是,Func 可能具有引用限定的 operator()。像下面这样:

struct Func {
operator()(/* stuff */) &&;
}

这只能在右值上调用,所以第二次调用不会编译,因为 myfunction 中的 func 是左值。或者它可以有引用限定的重载:

struct Func {
operator()(/* stuff */) &;
operator()(/* stuff */) &&;
}

在这种情况下,没有 std::forward 的调用将使用第一个重载,而不管传递给 myfunction 的是什么:左值或右值。另一方面,使用 std::forward 的调用将根据传递的 func 对象的左值选择适当的重载。

关于c++ - 调用时 std::forward<Func> 的效用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29661303/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com