gpt4 book ai didi

c++ - 运算符重载传递和返回的参数

转载 作者:行者123 更新时间:2023-11-30 02:43:33 25 4
gpt4 key购买 nike

我看到在 C++ 中的许多示例中,运算符重载获取通过引用传递的类实例作为参数,或者如果它返回类实例,它也通过引用返回它。为什么人们选择通过引用传递它而传递指针/按值也可以工作,有什么理由吗?一个例子:

Class MyClass
{
public:
int m_num;
MyClass() { m_num = 1;}
const MyClass operator+(const MyClass& mcls)
{
MyClass temp;
temp = m_num + mcls.m_num;
return temp;
}
}

假设我们重载 = 运算符。

因此,以我编写的代码为例,将参数发送到 operator+ 重载函数而不是通过引用并且还返回 MyClass 的实例而不是通过引用也可以工作,但我在很多示例中看​​到它是通过引用传递和返回的我想知道这背后是否有原因,或者它只是某种类型的惯例或偏好?

最佳答案

严格来说,不需要按引用或常量引用传递:代码可以使用按值传递。然而,对于大多数运算符来说,这将是低效的,因为按值传递需要复制整个对象 - 这是您在按引用传递时避免的事情。

返回值也是如此:通常情况下,您应该按值返回。但是,这一规则有一个值得注意的异常(exception):所有复合赋值运算符都需要通过引用返回,因为它们返回 (*this)

使用指针而不是引用是不可能的,但出于不同的原因:C++ 要求运算符按类型与特定签名兼容;引用与相应类型的值类型兼容,但指针不兼容。如果您定义采用指针的运算符的重载,C++ 将不会在处理值时使用您的运算符。

关于c++ - 运算符重载传递和返回的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26050814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com