++ operator overload - 循环不会在没有引用的情况下终止

时间:2017-05-02 13:15:49

标签: c++ reference operator-overloading

有人可以解释为什么main()中的以下循环不会终止

#include <iostream>

enum day {
Sunday,     // 0
Monday,     // 1
Tuesday,    // 2
Wednesday,  // 3
Thursday,   // 4
Friday,     // 5
Saturday,   // 6
not_a_day   // 7
};

day operator++(day d) {
    d = (day)(d + 1);
    return d;
}

int main() {
    day d;
    d = Sunday;
    while (d <= Saturday) {
        ++d;
    }
    std::cout << d << std::endl;
    return 0;
}

当我将重载运算符更改为使用引用时,它按预期工作,返回7

day &operator++(day &d) {
    d = (day)(d + 1);
    return d;
}

取自here

的示例

我也不明白为什么编译器能够使用day运算符int强制转换为+ ,但是无法这样做对于++

0 个答案:

没有答案