Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ obj1*=obj2与C和x2B中的obj1=obj1*obj2+;_C++_Operator Overloading - Fatal编程技术网

C++ obj1*=obj2与C和x2B中的obj1=obj1*obj2+;

C++ obj1*=obj2与C和x2B中的obj1=obj1*obj2+;,c++,operator-overloading,C++,Operator Overloading,假设我已经实现了*=、=和*操作符重载,那么您更喜欢使用哪种复杂度? 谢谢 如果您已经正常实现了它们,那么更喜欢*=。另一种方法需要制作一个副本,然后对其应用*=,然后将其重新分配。如果您已经正常实现了它们,则首选*=。另一种方法需要制作一个副本,然后对其应用*=,然后将其重新分配。鉴于我通常在操作符*=和副本方面实现操作符*,因此没有理由选择操作符* 操作符*(和+,-,/等)的正常实现通常应如下所示: T operator *(T const& left, T const&

假设我已经实现了
*=
=
*
操作符重载,那么您更喜欢使用哪种复杂度?
谢谢

如果您已经正常实现了它们,那么更喜欢
*=
。另一种方法需要制作一个副本,然后对其应用
*=
,然后将其重新分配。

如果您已经正常实现了它们,则首选
*=
。另一种方法需要制作一个副本,然后对其应用
*=
,然后将其重新分配。

鉴于我通常在
操作符*=
和副本方面实现
操作符*
,因此没有理由选择
操作符*

操作符*
(和
+
-
/
等)的正常实现通常应如下所示:

T operator *(T const& left, T const& right) {
    T result = left;
    return result *= right;
}

考虑到我通常在
操作符*=
和一个副本方面实现
操作符*
,没有理由选择
操作符*

操作符*
(和
+
-
/
等)的正常实现通常应如下所示:

T operator *(T const& left, T const& right) {
    T result = left;
    return result *= right;
}

=和*分开的实现更有用。它允许a*b*c*d类型的表达式。然而,考虑创建额外副本的开销,如Benjamin Lindley所指出的。

=*和*单独的实现更有用。它允许a*b*c*d类型的表达式。然而,考虑创建额外副本的开销,如Benjamin Lindley所指出的。

< P>对于指定的简单操作,这两种用法都不复杂。但是,对于较长的表达式,*=可以使内容更可读。

对于您指定的简单操作,这两种用法并不复杂。但是,对于较长的表达式,*=可以使内容更具可读性。

啊,我们再来一次,另一个“对”的问题我不介意“对”的性质。我注意模糊。“复杂性智慧”?这些运营商是做什么的?想和大家分享吗?为什么要投反对票?我认为这是一个很好的问题……可能是“代码> i++//<代码> VS <代码> I+= 1 < /Cord> VS <代码> I= I+1+/< 1 >代码>:- Scott Meyer的C++中有很好的解释,C++更有效。我注意模糊。“复杂性智慧”?这些运营商是做什么的?想和大家分享吗?为什么要投反对票?我认为这是一个很好的问题……可能是更坏的,可能是代码> I++<代码> VS <代码> I+= 1 < /Cord> VS <代码> I= I+1/ 1 < /C> >:- Scott Meyer的C++中有很好的解释,C++更有效。好点。然而,有了新的c++11的移动语义,这并没有太大的开销。@Eddie:所有的小事情都加起来了。而且,由于使用
x*=y
代替
x=x*y
在性能、个人生产力或代码可读性方面不会花费任何成本,因此绝对没有理由选择后者。这一点很好。然而,有了新的c++11的移动语义,这并没有太大的开销。@Eddie:所有的小事情都加起来了。由于使用
x*=y
代替
x=x*y
在性能、个人生产力或代码可读性方面不需要花费任何成本,因此绝对没有理由选择后者。