title: Confusion between rvalue references and const lvalue references as parameter
body: <p>So the parameter list for a copy constructor consists of an const lvalue reference, like <code>const B&amp; x</code>.
  The parameter list for a move constructor, however, consists of an rvalue reference, like <code>B&amp;&amp; x</code>.</p>
  
  <p>When I discovered this, it seemed odd to me, so I tried to define a function taking a const lvalue reference as an argument:</p>
  
  <pre><code>void calculator(const Intvec&amp; veccor) 
  { 
  cout &lt;&lt; "in veccor" &lt;&lt; veccor.m_size &lt;&lt; "\n"; 
  }
  </code></pre>
  
  <p>I already knew that const lvalue reference can bind to anything, so the result was sort of expected. I tried calling the function with both and lvalue and an rvalue and as expected, it all worked:</p>
  
  <pre><code>calculator(Intvec(33)); //works
  Intvec newvec(22);
  calculator(newvec); //works
  </code></pre>
  
  <p>I then tried to change the parameter list of <code>calculator</code> to an rvalue reference, and as expected, only the rvalue worked when calling it.</p>
  
  <p>So since a const lvalue reference can take both lvalues and rvalues as an argument, why does the move constructor not just use a const lvalue reference instead of an rvalue reference? 
  And why not just always use const lvalue references in general, like in cases where you would not do the same as what is happening in a move constructor? </p>