C 声明具有自动参数要转发

C++ decltype with auto parameters to forward

本文关键字:参数 转发 声明      更新时间:2023-10-16

只是在此处发布以查看是否有人可以在更多的'liemans'解释中借用一些有用的信息。

我在stackoverflow上看到了很多关于em and distlype和auto之间的差异。但是,我要么没有单击足够的论坛帖子,要么根本不在那里。这是上周的一个测试问题,那时我无法弄清楚这一点,我在与Google和其他各种论坛度过了一段美好时光之后,我现在仍然非常模糊。

为什么应该使用自动&&std ::转发它们的参数?

伪/示例代码为此是什么样的?

如果您在这里知道类似的帖子,我会很乐意朝着正确的方向提出重点:)

感谢您的帮助,谢谢!

给定lambda函数

auto f = [](auto&& arg) {
  // ...
};

这大致相当于模板函数:

template<class Arg>
auto f(Arg&& arg)
{
  // ...
}

请注意,在他们的模板函数中,我们有模板类型Arg,我们可以使用该模板来转发参数arg

所以我们可以写

do_something(std::forward<Arg>(arg));

碰巧的是decltype(arg)Arg

我们可以替代:

do_something(std::forward<decltype(arg)>(arg));

在lambda中,我们没有模板类型Arg,但是decltype(arg)是等效的。

再次,相同的表达能够满足我们的目的:

auto f = [](auto&& arg) {
  do_something(std::forward<decltype(arg)>(arg));
};

,或者我们对读者有点友善:

auto f = [](auto&& arg) 
{
  using arg_type = decltype(arg);
  do_something(std::forward<arg_type>(arg));
};