The move semantics are too well explained in Rust Book. It's general concept, so if you read it you will also understand how move works in C++ and other languages. The one thing I will notice that in C++ there are no safety checks like in Rust.
Personally, I understood how move works in C++, Rust, etc. after reading these 2 sentences (I couldn't do it after reading dozens of articles on the topic of move in C++):
If you’ve heard the terms shallow copy and deep copy while working with other languages, the concept of copying the pointer, length, and capacity without copying the data probably sounds like making a shallow copy. But because Rust also invalidates the first variable, instead of being called a shallow copy, it’s known as a move.