假设我已经实现了*=
,=
和*
运算符重载,您更喜欢使用哪种复杂性? 谢谢。obj1 * = obj2 VS.在C++中obj1 = obj1 * obj2
0
A
回答
2
考虑到我通常会根据operator *=
和副本实施operator *
,所以没有理由选择operator *
。
正常执行operator *
(和+
,-
,/
等)通常应如下所示:
T operator *(T const& left, T const& right) {
T result = left;
return result *= right;
}
0
如果你已经正常实施它们,那么更喜欢*=
。另一种方式需要复印,然后将*=
应用于其上,然后将其分配回去。
+0
好点。然而,随着新的C++ 11的语义转移,这不算什么开销。 – EddieBytes
+1
@Eddie:所有的小东西加起来。而且由于使用'x * = y'来代替'x = x * y'在性能,个人生产力或代码可读性方面没有任何成本,所以完全没有理由偏好后者。 –
0
=和*单独实施更加有用。它允许一个* b * c * d类型的表达式。然而,正如Benjamin Lindley指出的那样,考虑创建额外副本的开销。
1
这两种用法对于您指定的简单操作都不复杂。但是,对于更长的表达式,* =可以使事情更具可读性。
相关问题
- 1. Object.Equals(obj1,obj2)vs obj1.Equals(obj2)?
- 2. @ [obj1,obj2]创建什么样的对象?
- 3. 重载“=”使obj2的时候= OBJ1
- 4. 此行错误:示例Obj2 = new示例(Obj1);
- 5. 当在Obj1的构造函数中使用新的Obj2()时,C++分配以前保留的内存?
- 6. 在Drools规则中,如何使用两个不同的ArrayList对象,在规则1中使用obj1,在规则2中使用obj2?
- 7. 为什么我会得到“无法读取属性'obj2'的未定义”而不是另一个?
- 8. == VS在Java
- 9. 对象克隆浅拷贝不会改变变量
- 10. 合并vs MergeDeep
- 11. _root.obj1.obj2.obj3.obj4和访问嵌套对象
- 12. 如何在C#
- 13. C#对象/对象
- 14. 对命令层次结构的说明接口
- 15. __clone()vs unserialize(serialize())?
- 16. 需要从一个对象有出过写现有对象扩展性到另一个如果他们共享
- 17. 这个语法有什么作用?如果(obj是SomeType obj2)
- 18. 类型声明的重要性,零值
- 19. 如何使用Python中另一个DataFrame对象中的值更新DataFrame对象的一部分?
- 20. 了解Scala Ordered []特征来比较参考
- 21. 由单重复创建对象,但该对象的地址是不同的
- 22. 如何在mac上的C++应用程序中使用多线程?
- 23. 语法糖来检查剃刀空值
- 24. 组合2泛型列表
- 25. 复制参考数组
- 26. 我该如何压缩这个?
- 27. 如何使用gnu make tool来更新档案?
- 28. 使用Object.create()和使用赋值运算符有什么区别?
- 29. C# - 方法接受任何类型的参数(重新使用现有的方法)
- 30. CollectionChanged事件得到执行非关联对象
这里我们再次走,另一个“VS.”问题 –
我不介意“vs”问题。我介意模糊。 “复杂明智”?这些运营商做了什么?小心分享? –
为什么downvotes?我认为这是一个很好的问题... –