加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

没有新返回对象的C算术运算符

发布时间:2020-12-16 10:01:48 所属栏目:百科 来源:网络整理
导读:这是一个相当简单的概念.我有一个算术运算符,我希望更新操作不创建对象.实质上, MyType A;MyType B;MyType C;A = B - C;A = C - B; 语句A = B-C不应再次调用MyType的构造函数,因为已经创建了A,即构造函数只应在此程序中调用3次.有没有办法在保持良好语法的同
这是一个相当简单的概念.我有一个算术运算符,我希望更新操作不创建对象.实质上,

MyType A;
MyType B;
MyType C;

A = B - C;
A = C - B;

语句A = B-C不应再次调用MyType的构造函数,因为已经创建了A,即构造函数只应在此程序中调用3次.有没有办法在保持良好语法的同时实现这一目标?我怀疑我可以让运算符函数知道不要创建一个对象,而是使用一些引用.是否有一种更简化的方法来使用我不知道的c语法来做到这一点?

class MyType
{
    MyType* OperatorReturnObj;

    MyType operator-(const MyType& Left,const MyType& Right)
    {
        // This removed and replaced with SetOperatorReturnObj function
        // MyType OperatorReturnObj();

        OperatorReturnObj= Left - Right;
        return OperatorReturnObj;
    }


    void MyType SetOperatorReturnObj(MyType* Ref)
    {
         OperatorReturnObj = Ref;
    }
};

解决方法

没有丑陋的技巧,比如创建对象池并在内部使用它们(复杂性比这种情况下的任何好处更昂贵),没有办法实现这一点.问题是那句话:

A = B - C;

等于:

A.operator=( operator-( B,C ) );

你可以看到operator-(B,C)必须先执行并在某处提供结果.所以你要么改变语法,如:

A += B; A -= C; // or even
(A += B) -= C; // or maybe
A += B -= C;

或使用常规语法,如果您需要效率实现移动语义.

经过一番思考后,您可以创建MyTypeExression类型的对象,该对象不进行实际计算,但会记住参数和操作,并且只有在执行MyType :: operator =(MyTypeExression)时才执行它们.虽然为了工作,你可能需要一个带有MyType智能指针的包装器,这样MyTypeExression就不必复制它的参数了.所以这个解决方案可以被认为是我之前提到的复杂技巧.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读