以下是代码片段:
int i=0;
int&&k=std::move(i);
在 C++ 入门中,移动是
template <typename T>
typename remove_reference<T>::type &&move(T&& t)
{return static_cast<typename remove_reference<T>::type&&>(t);}
据我所知,这个std::move
模板会扣除一个像
int&& move(int& t){return static_cast<int&&>(t);}
作为比较并详细说明我的问题,请考虑以下示例:
int test(int k){k=66;return k;}
int k;
int a=test(k);
上面的代码将被编译为:
int temp;//the temporary object
temp=k;
int a=temp;
同样,我认为第一个代码片段将编译为:
int&& temp=0;
int&& k=temp;//oop!temp is an lvalue!
这似乎是错误的,因为temp
它是一个左值,我有什么问题吗?