std::move() and xvalue in C++
本问题已经有最佳答案,请猛点这里访问。
有人能给我一个关于xValue和std::move()行为的"非循环"定义/解释吗?
我查看了cppreference页面,它说"std::move()生成一个xvalue"。(好)
然后我查找了"xvalue"的定义,它说的第一件事是它是一个函数调用或重载的运算符表达式,如"std:move"。???)
那句话没有循环定义。
The following expressions are xvalue expressions:
a function call or an overloaded operator expression, whose return type is rvalue reference to object, such as std::move(x);
...
这里
1 2 | template< class T > constexpr typename std::remove_reference<T>::type&& move( T&& t ) noexcept; |
其返回值必须是右值引用。
左值是一个对象在内存中占据某个位置,而右值则暂时占用内存。
1 2 3 4 | int main() { int x = 3 + 4; std::cout << x << std::endl; } |
在上面的示例中,
现在考虑你这样做:
请检查以下示例:
1 2 3 4 5 | swap(int &a, int &b) { int tmp = a; // Two copies of a; one of them is tmp a = b; // Two copies of b; one of them is a b = tmp; // Two copies of tmp; one of them is b } |
使用
1 2 3 4 5 | swap(int &a, int &b) { int tmp = std::move(a); // tmp is an xvalue a = std::move(b); b = std::move(tmp); } |
你不抄袭,而是把它们移到别处。实际上,你要传输它的内容一段时间。它们很快就会被摧毁。他们现在是