gpt4 book ai didi

C++ 运算符重载 : implementing + with +=

转载 作者:行者123 更新时间:2023-11-30 02:54:53 26 4
gpt4 key购买 nike

Operator overloading

显示这是通过以下方式完成的

class X {
X& operator+=(const X& rhs)
{
// actual addition of rhs to *this
return *this;
}
};
inline X operator+(X lhs, const X& rhs)
{
lhs += rhs;
return lhs;
}

我理解为什么参数lhs需要按值取值,但是为什么我们需要按值返回呢?我的意思是,以下内容有什么问题:

inline X& operator+(X lhs, const X& rhs)
{
lhs += rhs;
return lhs;
}

在函数内部,lhs 是一个新的X,修改它不会影响两个操作数中的任何一个。由于这是新的,我们可以通过引用返回它,对吧?

最佳答案

返回对本地对象的引用的问题是调用者将收到到达时已经死亡的东西。

当你退出一个函数时,所有局部变量都会被销毁,所以你不能继续使用对它们的引用。

代码如下

const X& res = a+b;

如果运算符按值返回会起作用,因为语言中有一条特定规则规定绑定(bind)到引用的临时对象将保持事件状态,直到引用本身被销毁。

相反,返回引用是不同的,因为对象的生命周期是被调用操作符的责任,而不是调用者的责任。因此最终结果将是绑定(bind)到已销毁对象的引用。

即使只是

X res;
res = a+b;

不会工作,因为当运算符调用返回时,对象在分配给 res 之前被销毁。对于复制构造函数 X res = a+b; 也是如此。

关于C++ 运算符重载 : implementing + with +=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16785307/

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