确定Plusequals运算符语法 我对C++很新,我正在尝试了解自定义操作符。我目前遇到的问题是如何定义自己的+=运算符以及如何实现它的最佳方法。这涉及到一个简单的类,该类具有可以添加到的公共int成员(intValue)。以下两个代码示例(我一次尝试一个)在我的程序中的操作完全相同。“完全相同”是指我得到相同的结果并创建相同数量的对象
哪一个更正确(标准实践),为什么 或 如果有必要,他们呼叫的接线员:确定Plusequals运算符语法 我对C++很新,我正在尝试了解自定义操作符。我目前遇到的问题是如何定义自己的+=运算符以及如何实现它的最佳方法。这涉及到一个简单的类,该类具有可以添加到的公共int成员(intValue)。以下两个代码示例(我一次尝试一个)在我的程序中的操作完全相同。“完全相同”是指我得到相同的结果并创建相同数量的对象,c++,operators,correctness,C++,Operators,Correctness,哪一个更正确(标准实践),为什么 或 如果有必要,他们呼叫的接线员: Utility operator +(Utility left, Utility right) { return Utility(left.intValue + right.intValue); } 每当调用该类的构造函数时,该类都会打印出一条消息,这样我就可以知道是否正在生成一个新对象。基于我在这里尝试的+=的两种形式会导致创建相同数量的对象。因为+=通常会修改它的左操作数,所以通常不希望用操作符+实现它(需要创建
Utility operator +(Utility left, Utility right)
{
return Utility(left.intValue + right.intValue);
}
每当调用该类的构造函数时,该类都会打印出一条消息,这样我就可以知道是否正在生成一个新对象。基于我在这里尝试的+=的两种形式会导致创建相同数量的对象。因为
+=
通常会修改它的左操作数,所以通常不希望用操作符+
实现它(需要创建一个临时值来保存结果)
同样,由于不能合理地对左操作数进行转换,因此它实际上应该是一个成员函数
Utility &Utility::operator+=(Utility const &right) {
intValue += right.intValue;
return *this;
}
由于
+=
通常修改其左侧操作数,因此通常不希望使用运算符+
实现它(需要创建一个临时值来保存结果)
同样,由于不能合理地对左操作数进行转换,因此它实际上应该是一个成员函数
Utility &Utility::operator+=(Utility const &right) {
intValue += right.intValue;
return *this;
}
通常,人们希望
+=
修改左侧操作数,如果避免使用导致创建临时值的运算符+
实现它,效果会更好
此外,
Utility& operator +=(Utility& left, Utility right)
{
return left = left + right;
}
在返回结果的意义上,它比另一个更好。这使用户能够编写复合表达式,如:
Utility utility1 , utility2;
Utility ut += (utility1 += utility2);
但是,如果您可以在不使用
运算符+
的情况下在内部修改实用程序
,则效果会更好。通常,人们希望+=
修改左手操作数,如果您避免使用导致创建临时值的运算符+
实现它,效果会更好
此外,
Utility& operator +=(Utility& left, Utility right)
{
return left = left + right;
}
在返回结果的意义上,它比另一个更好。这使用户能够编写复合表达式,如:
Utility utility1 , utility2;
Utility ut += (utility1 += utility2);
但是,如果您可以在内部修改
实用程序
,而无需操作员+
,那就更好了。谢谢你们的回复,他们都有一些独特的东西需要我学习。有没有办法表明这两个答案都是有用的?你只能勾选一个。谢谢,我以后有代表的时候会这么做。谢谢你们的回复,他们都有一些独特的东西需要我学习。有没有办法表明这两个答案都是有用的?您只能检查一个。谢谢,我以后有代表这样做时会这样做。