重载时的未处理异常<<操作者

时间:2017-04-17 22:18:04

标签: c++ operator-overloading

我正在尝试重载<<检测溢出操作的New Integer类的运算符是我的代码部分:

    class NewInteger{
                private: 
                int num;

                public: 
                NewInteger();
                NewInteger(int);
                friend std::ostream &operator <<(std::ostream& out, const NewInteger& rhs);
                NewInteger operator+ (NewInteger);

                .../ many other member functions/
            }

实施是:

    NewInteger NewInteger::operator+(NewInteger n)
{
    int a = this->getValue();
    int b = n.getValue();
    if (a > 0 && b > max - a) {
        throw std::exception();
        std::cout << "studpid" << std::endl;
    }
    if (a < 0 && b < min - a) {
        throw std::exception();
    }

    return NewInteger(a + b);
}
  std::ostream & operator<<(std::ostream & out, const NewInteger& rhs)
    {
        out << rhs;
        return out;
    }

在main.cpp中,我尝试运行:

来测试代码
    NewInteger n7(4);
    NewInteger n8(5);
    std::cout << n7.operator+(n8) << std::endl;

代码构建正常,当我在Visual Studio 2015上运行它时,它会导致程序关闭而不会产生致命错误。所以当我调试代码时,它给了我:`

Exception thrown at 0x00C43B49 in NewInteger.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x00192F90)

并且断点出现在运算符&lt;&lt;的实现处。但我无法弄清楚我应该尝试在实现中捕获什么异常。

有人可以告诉我这是什么原因?

1 个答案:

答案 0 :(得分:4)

std::ostream & operator<<(std::ostream & out, const NewInteger& rhs)
{
    out << rhs;
    return out;
}

第一行在operator<<out上调用rhs - 这是您正在定义的功能。你有无限的递归。