I am reading about the std::move, move constructor and move assignment operator. To be honest, all I got now is confusion. Now I have a class:
class A{
public:
B
is the name of an object. Once a reference has been bound, it names an object. The distinction "rvalue reference", "lvalue reference" and "named object" only applies to how the name can be bound before you got this far.B.key
is the name of a variable in the object which was supplied as argument to this function call.
The line A.key = std::move(B.key)
invokes the built-in definition of assignment for an int
(this is a simple assignment, not a function call), which is just a copy. So B.key
retains its value.
For A(B())
to compile, B
must be a typename which you haven't defined yet. (Did you mean A(A())
? If so, then the answer is "Yes").
See 2
Use std::move(Z.foo)
whenever you want to move out of Z.foo
instead of copying from Z.foo
.