没有新返回对象的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就不必复制它的参数了.所以这个解决方案可以被认为是我之前提到的复杂技巧. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |