title: Why must the copy assignment operator return a reference/const reference?
body: <p>In C++, the concept of returning reference from the copy assignment operator is unclear to me. Why can't the copy assignment operator return a copy of the new object? In addition, if I have class <code>A</code>, and the following:</p>
  
  <pre><code>A a1(param);
  A a2 = a1;
  A a3;
  
  a3 = a2; //&lt;--- this is the problematic line
  </code></pre>
  
  <p>The <code>operator=</code> is defined as follows:</p>
  
  <pre><code>A A::operator=(const A&amp; a)
  {
      if (this == &amp;a)
      {
          return *this;
      }
      param = a.param;
      return *this;
  }
  </code></pre>