zoukankan      html  css  js  c++  java
  • 调用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

  • 相关阅读:
    [bzoj3524]Couriers
    [bzoj2789]Letters
    [bzoj4318]OSU!
    [luogu4570]元素
    [hdu6600]Just Skip The Problem
    [bzoj5025]单调上升路径
    [bzoj4557]侦察守卫
    [hdu5379]Mahjong tree
    [bzoj2957]楼房重建
    [noi253]A
  • 原文地址:https://www.cnblogs.com/clairvoyant/p/5371494.html
Copyright © 2011-2022 走看看