为什么STD :: MOVE将RVALUE参考作为参数
Why does std::move take rvalue reference as argument?
根据cppreference.com, move
具有签名
template< class T >
typename std::remove_reference<T>::type&& move( T&& t ) noexcept;
为什么它将rvalue参考 T&& t
作为灌溉?
也尝试以下代码
时void foo(int&& bar) {
cout << "baz" << endl;
}
int main(){
int a;
foo(a);
}
我从编译器中遇到了一个错误" rvalue参考不能绑定到lvalue"
发生了什么事?我很困惑。
它不是rvalue参考,而是转发参考;可以保留论点的价值类别。这意味着std::move
可以同时使用LVALUE和RVALUE,并无条件地将其转换为RVALUE。
转发参考是一种保留函数参数的价值类别的特殊参考文献,使得可以通过std :: forward转发它。转发引用是:
1)函数模板的功能参数,称为rvalue 引用该相同的CV UNCALIFIFIED类型模板参数 功能模板:
2)自动&amp;&amp;除了从支撑初始化列表中推导出来。
另一方面,int&&
是RVALUE参考;请注意此处的区别,如果函数模板参数具有带有模板参数T
的类型T&&
,即推论类型T
,则参数是转发参考。
相关文章:
- Lambda闭包左值可以作为右值参考参数传递
- 遍历地图并将该对用作参考参数 C++11
- 什么是常量参考参数以及如何使用它?
- 如何将rvalue作为参考参数传递给函数
- 移动 l 值参考参数是否是一种不好的做法?
- C 11:为什么RVALUE参考参数隐式转换为LVALUE
- 为什么可以将其他类型变量用作C 中常量参考参数参数的参数
- 如何处理可能指向内部数据的参考参数
- C 功能具有参考参数错误的迭代器错误.寻求解释
- 用emscripten中的参考参数绑定函数
- 一种体面的方式来转换const列表参考参数,然后传递到另一个函数
- 参考参数和递归
- 分配运算符过载:返回void与返回参考参数
- C ,构造器中允许的参考参数默认值
- Qt信号和插槽:是复制的参考参数
- C 接收const lvalue和rvalue参考参数,而无需过载
- std ::移动返回和输入参考参数
- 参考参数返回副本
- 如何使用数组和参考参数调用void函数
- 按值传递参考参数