为什么重载运算符可以返回其返回类型以外的其他内容?

Why can an overloaded operator return something else than its return-type?

本文关键字:其他 运算符 重载 返回 为什么 返回类型      更新时间:2023-10-16

我正在为即将到来的考试进行练习,我在一次练习中遇到了一段奇怪的代码。对于上下文,这是您必须确定代码是否会运行、它有什么问题等的练习之一。我觉得奇怪的代码如下:

class A {
int x;
public:
A(int i = 0) { x = i;}
A operator+(const A& a) { return a.x + x;}
...\ rest of the code is not relevant
};

当然,我假设运算符会生成错误,因为它返回一个 int 值,而它的返回类型被定义为类 A。但是,在我的 IDE 中插入整个示例后,为了检查我是否正确,不仅函数声明中没有抛出错误,而且代码中的一个稍后加法操作实际上"有效"(我使用引号,因为它返回的值是垃圾,但它也没有抛出任何错误(。

为什么这不会引发任何错误?

int可以通过构造函数隐式转换为AA(int)。您的operator+实际上执行return A{a.x + x};

这不是特定于重载运算符的 - 每当在需要另一种类型的地方提供一种类型的表达式时,编译器就会寻找将前者隐式转换为后者的方法。