【发布时间】:2014-02-19 10:42:23
【问题描述】:
我试图刷新我的 c++ 知识并发现一个奇怪的行为。当我声明一个类并在其中重载一个运算符时,我忘记了该运算符有一个返回值。这导致了一些我无法解释的行为。 代码如下:
class myClass{
double i;
myClass(double value): i(value){}
myClass operator+ (const double ¶m)
{
i = i + param;
}
};
因此,operator+ 应该返回一个 myClass 类型的值,但它只是将参数添加到成员 i。 当我在我的程序中尝试这个运算符时,
myClass A(10.5);
A+10.0;
结果是 A.i = 20.5,如我所料。但是如果我将代码更改为
A = A + 10.0;
结果是 A.i = nan,或一些非常小的数字。我意识到,operator+ 应该根据定义返回一个值,但我没有在其定义中添加 return。 我的问题是,在这种情况下会返回什么?内存中的一些随机垃圾值?如果期望返回 myClass 类型的值,为什么编译器不强制在运算符定义中添加返回值?
【问题讨论】:
-
简而言之:你写的东西有未定义的行为,编译器不需要捕捉它,任何事情都可能在运行时发生。
-
A+10.0;不应该改变 A 的成员,这就是operator +=的用途!这只是超级混乱 -
是的,这令人困惑。首先我尝试了 A = A + 10.0,当我意识到它没有按预期工作时,我尝试了普通的 A+10.0。我不会使用这种方式我的运营商,只是尝试如果它有效。
标签: c++ operator-overloading return-value