gpt4 book ai didi

c++ - 在完美转发中 `decltype(std::forward(args))...` 和 Args&& 有什么区别

转载 作者:太空狗 更新时间:2023-10-29 20:23:38 28 4
gpt4 key购买 nike

今天我在学习完美转发,我创建了这个代码示例

#include <utility>
#include <functional>

template<typename Function, typename... Args>
auto toStdFun(Function&& fun, Args&&...args)
{
using retType = decltype(fun(std::forward<Args>(args)...));

return std::function<retType(decltype(std::forward<Args>(args))...)>(fun);

}

int main()
{
toStdFun([] () {});

}

然后,有人告诉我使用 decltype(std::forward<Args>(args))...可以简单地表示为 Args&&...像这样:

#include <utility>
#include <functional>

template<typename Function, typename... Args>
auto toStdFun(Function&& fun, Args&&...args)
{
using retType = decltype(fun(std::forward<Args>(args)...));

return std::function<retType(Args&&...)>(fun);

}

int main()
{
toStdFun([] () {});

}

这两个样本有什么区别?

最佳答案

std::forward<T>无非就是添加 &&输入 T并在用于转发参数时应用引用折叠规则。 Args&&...也是如此

恕我直言,decltype(std::forward<Args>(args))...Args&&...是一样的。

关于c++ - 在完美转发中 `decltype(std::forward<Args>(args))...` 和 Args&& 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32018519/

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