为什么一个重载操作符可以返回它的返回类型以外的东西?[重复]

问题描述 投票:0回答:1

我正在为即将到来的一次考试练习,我在一次练习中发现了一段奇怪的代码。对于背景来说,这是一个练习,你必须判断代码是否能运行,有什么问题等等。我觉得奇怪的代码是下面这段。

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中插入整个例子后,为了检查我是否正确,不仅在函数声明时没有抛出错误,而且代码中后来的一个加法操作实际上 "工作 "了(我用引号是因为它返回的值是垃圾,但它也没有抛出任何错误)。

为什么这个没有抛出任何错误?

c++ oop operator-overloading
1个回答
1
投票

int 是隐式转换为 A,通过 A(int) 构造函数。你的 operator+ 实际上 return A{a.x + x};

这并不是重载操作符所特有的--每当提供一种类型的表达式,而期望的是另一种类型时,编译器就会寻找方法隐式地将前者转换为后者。

© www.soinside.com 2019 - 2024. All rights reserved.