只是在这里发帖,看看是否有人可以在更多的“非专业人士”解释中提供一些有用的信息。
关于decltype和auto之间的差异,我在stackoverflow上看到了很多。但是,我要么没有点击足够的论坛帖子,要么根本就没有。这是上周的一个测试问题,我当时的生活中无法弄清楚,在与Google及其他各种论坛共度美好时光之后,我现在对细节仍然非常模糊。
为什么人们应该使用decltype和auto&&参数到std ::转发它们?
伪/示例代码对此是什么样的?
如果你在这里知道类似的帖子,我会高兴地指出正确的方向:)
感谢您的帮助,谢谢!
答案 0 :(得分:0)
给出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));
};