title: Understanding std::move and its purpose by example
body: <p>Consider the following code:</p>
  
  <pre><code>class c
  {
      large_type_t i;
  public:
      // the most simple variant
      c( large_type_t i ): i( i ) { }
      // move the parameter copied
      c( large_type_t i ): i( std::move( i ) ) { }
      // copy is done directly in interaction with our class member from original
      c( const large_type_t &amp;i ): i( i ) { }
      // parameter was constructed in the call, just treat as rvalue
      c( large_type_t &amp;&amp;i ): i( std::move( i ) ) { }
      // this is here just to show all possible combinations in case someone in the future sees this question and someone answering it wants to explain everything
      c( large_type_t &amp;&amp;i ): i( i ) { }
  };
  </code></pre>
  
  <p>What is the best way to do this? Are these all going to boil down to the same code anyway and it doesn't matter? I feel that I am fundamentally not understanding the purpose of move.</p>