title: Why is it more efficient to define operator+ to call operator+= rather than the other way around?
body: <p>It's an exercise from <em>C++ Primer 5th Edition</em>:</p>
  
  <blockquote>
    <p>Exercise 14.14: Why do you think it is more efficient to define
    operator+ to call operator+= rather than the other way around?(P.561)</p>
  </blockquote>
  
  <p>Given the implementations for <code>operator+=</code> and <code>operator+</code>:</p>
  
  <pre><code>Sales_data&amp; 
  Sales_data::operator+=(const Sales_data &amp;rhs)
  {
      units_sold += rhs.units_sold;
      revenue += rhs.revenue;
      return *this;
  }
  
  Sales_data
  operator+(const Sales_data &amp;lhs, const Sales_data &amp;rhs)
  {
      Sales_data sum = lhs;  // copy data members from lhs into sum
      sum += rhs;             // add rhs into sum
      return sum;
  }
  </code></pre>
  
  <p>At the end of this section (14.3) , the author gave a tip that</p>
  
  <blockquote>
    <p>Classes that define both an arithmetic operator and the related
    compound assignment ordinarily ought to implement the arithmetic
    operator by using the compound assignment.</p>
  </blockquote>
  
  <p>Can anyone explain this tip, using facts/examples?</p>