The description for static cast says
If new_type is an rvalue reference type, static_cast converts the value of expression to xvalue. This type of static_cast is used to implement move semantics in std::move.(since C++11)
Does this confirm that the following are equivalent ?
(A)
X x1;
X x2 = static_cast<X&&>(x1);
(B)
X x1;
X x2 = std::move(x1);
Yes there is a very important difference: std::move
documents what you want to do. In addition the cast is prone to writing errors like a forgotten &
or wrong type X
.
As it can be seen, std::move
is even less to type.