右值引用与“&& &&”合并的示例

Example of rvalue reference collapsing with "&& &&"

根据 some rules,当您有模板和引用时,您可以得到像 T & && 这样的类型,这些类型会被折叠。 基本上,除了 T && && 之外的所有内容都折叠为 T&,后者折叠为 T&&

触发 && && 案例的真实示例是什么?

我找到了一个 artificial example:

template <typename T> void func(T&& a);
auto fp = func<int&&>;

但到目前为止,在我的研究中,我还没有很好地了解这个案例实际出现的时间。

当参数类型是不受约束的 auto 时转发将是一个真实世界的例子。例如,在 lambda 中。

[](auto && arg) {
    return foobar(std::forward<decltype(arg)>(arg));
}
当使用右值调用 lambda 时,

decltype(arg) 会是一些 T&&。引用折叠规则最终将在 std::forward 的实现中发挥作用,并将 T && && 正确地转换为 return 类型的 T&&