Scott Meyer在这个例子中明确了右值引用和转发引用之间的区别:
Widget&& var1 = someWidget; // here, “&&” means rvalue reference (1)
auto&& var2 = var1; // here, “&&” does not mean rvalue reference (2)
template<typename T>
void f(std::vector<T>&& param); // here, “&&” means rvalue reference (3)
template<typename T>
void f(T&& param); // here, “&&”does not mean rvalue reference (4)
本质上,当我们有一个deducible 时,这种区别就会发生,因此,情况(3)明确指出我们有一个vector<...>&&
,而情况(4)中的T
将被推导出来,并(在应用参考折叠规则之后)按照“值类别”进行分类。
以下面的例子为例:,但是更复杂的模式匹配会发生什么呢?:
template <template <class...> class Tuple, class... Ts>
void f(Tuple<Ts...>&& arg)
{
}
&&
在这里是什么意思?
https://stackoverflow.com/questions/40819058
复制相似问题