Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
确定Plusequals运算符语法 我对C++很新,我正在尝试了解自定义操作符。我目前遇到的问题是如何定义自己的+=运算符以及如何实现它的最佳方法。这涉及到一个简单的类,该类具有可以添加到的公共int成员(intValue)。以下两个代码示例(我一次尝试一个)在我的程序中的操作完全相同。“完全相同”是指我得到相同的结果并创建相同数量的对象_C++_Operators_Correctness - Fatal编程技术网

确定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);

但是,如果您可以在内部修改
实用程序
,而无需
操作员+
,那就更好了。

谢谢你们的回复,他们都有一些独特的东西需要我学习。有没有办法表明这两个答案都是有用的?你只能勾选一个。谢谢,我以后有代表的时候会这么做。谢谢你们的回复,他们都有一些独特的东西需要我学习。有没有办法表明这两个答案都是有用的?您只能检查一个。谢谢,我以后有代表这样做时会这样做。