c++ - 是否通过引用返回成员方法重载
问题描述
所以我看到了一个关于类中运算符重载的视频。这个类是一个虚构的Number
类,它实例化了实数,可以像这样使用Number first(1)
or Number second(2)
(数字存储在一个 num 数据成员中),然后我们将运算符重载为成员方法,以便能够做到这一点first + second
or -first
。这些运算符重载的代码如下所示:
PS:rhs
右手边
Number &Number::operator+(const Number &rhs) {
//perform math calculation between both objects
return *this; //return lhs by reference
}
或者对于一元减号运算符,它只返回单个整数的减号版本(无用但用作示例):
Number operator-() {
int temp = -num;
return temp;//temporary
}
现在视频说如果对象在过载后用于链操作,我们应该通过引用返回一个对象,我也听说这取决于性能(是为了避免复制吗?),但在那之后我' m 仍然不确定何时在类运算符重载中通过引用返回对象。
提前致谢。
解决方案
您可以调用重载运算符,如:
二元算术运算:直接调用重载的运算符函数,方法与调用普通函数的方式相同:
number1 + number2; // normal expression operator+(number1, number2); // equivalent function call
在这种情况下,两个调用是等效的。两者都调用非成员函数,作为第一个参数和第二个参数
operator+
传递。二进制算术运算不会修改任何一个操作数 - 它实际上从两个参数返回一个新值。因此,您不返回参考。number1
number2
复合赋值运算:另一个选项是显式调用成员运算符函数:
number1 += number2; // expression-based call number1.operator+=(number2); // equivalent call to a member operator function
在这里,这两个语句都调用成员函数
operator+=
,绑定this
到地址并作为参数number1
传递。number2
因此,您将其作为参考返回。Number& operator+=(const Number& rhs) // compound assignment { /* addition of rhs to *this takes place here */ return *this; // return the result by reference }
推荐阅读
- java - 使用正则表达式从给定的字符串值中提取子字符串
- reactjs - 错误:java.io.IOException:UT000036:连接终止解析多部分数据
- java - Maven 创建单个可执行 jar 文件
- angular - JAVA SPRING 休息应用程序在正文中收到 null
- python - 如何克服 Python 中的 TypeError
- docker - 防止 nvidia-docker 使用 debian 包安装 nvidia 驱动程序
- android - 如何在导航图 Android 中通过 URI 处理深层链接?
- hibernate - Spring Data JPA / Hibernate有条件地获取孩子
- elasticsearch - 如何过滤字典中的特定值?
- sas - Proc 报告 - 调用定义以更改 GROUPING 变量下第二行的格式?