title: difference between rvalue reference and lvalue reference as argument
body: <p>After reading the post:<a href="http://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html" rel="nofollow noreferrer">http://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html</a>.</p>
  <p>I can not figure out that when you write functions that take lvalue or rvalue references as arguments, such as this:</p>
  <pre><code>void printReference (const string&amp; str)
  {
      cout &lt;&lt; str;
  }
  
  void printReference (string&amp;&amp; str)
  {
      cout &lt;&lt; str;
  }
  </code></pre>
  <p>why the <strong>first</strong> printReference function could accept any argument, whether it be an lvalue or an rvalue, and <em>regardless</em> of whether the lvalue or rvalue is mutable or not.
  However, in the <strong>second</strong> printReference function, just allow to pass mutable rvalue.</p>
  <p>May be my understanding is wrong, could anyone help me figure out it.</p>