調用operator+=來定義operator+比其他方法更有效?


如題,下面給出operator+=和operator+的實現

 1 Sales_data& 
 2 Sales_data::operator+=(const Sales_data &rhs)
 3 {
 4     units_sold += rhs.units_sold;
 5     revenue += rhs.revenue;
 6     return *this;
 7 }
 8 
 9 Sales_data
10 operator+(const Sales_data &lhs, const Sales_data &rhs)
11 {
12     Sales_data sum = lhs;
13 sum += rhs; 14 return sum; 15 }

    上面的代碼是用調用operator+來定義operator+=的。

    首先operator+有兩個參數,其參數類型為const,是不需要改變的,其返回類型為Sales_data類型的一個拷貝。不過每次都需要在函數體內定義一個臨時變量,用來返回拷貝。

    而operator+=有一個參數,其參數類型為const,不需要改變,其返回類型為Sales_data類型的引用。每次不需要在函數內創建臨時變量,直接可返回*this。

    如果用operator+來定義operator+=的話,則不論調用operator+還是operator+=,每次都會創建一個Sales_data的臨時變量。

    以下為調用operator+來定義operator+=的代碼:

 1 Sales_data& Sales_data::operator+=(const Sales_data &rhs)
 2 {
 3     Sales_data old_data = *this;
 4     *this = old_data + rhs;
 5     return *this;
 6 }
 7 
 8 Sales_data operator+(const Sales_data &lhs, const Sales_data &rhs)
 9 {
10     Sales_data sum;
11     sum.units_sold = lhs.units_sold + rhs.units_sold;
12     sum.revenue = lhs.revenue + rhs.revenue;
13     return sum;
14 }

 

    所以說調用operstor+=來定義operator+是更有效率的。

    你也會覺得這個問題對你有幫助:

http://stackoverflow.com/questions/21071167/why-is-it-more-efficient-to-define-operator-to-call-operator-rather-than-the


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM