c++重载操作符堆栈溢出

c++ overloading operator stack overflow

本文关键字:栈溢出 堆栈 操作符 重载 c++      更新时间:2023-10-16

我试图重载[]操作符。我得到一个未处理的异常错误。我正在使用vector<double>实现矩阵类。

double& Matrix::operator[](int i) 
{
    return (*this)[i];
}

(*this)返回您的Matrix对象。因此,(*this)[i]调用Matrix::operator[](i)。你的函数在没有任何终止条件的情况下调用自己,类似如下:

int foo() {
    return foo();
}

你可以想象,它很快就会崩溃。

您可能希望从成员变量调用std::vector::operator[]。例如,如果您的类有一个名为vec的私有向量对象,您可能希望这样做:

double& Matrix::operator[](int i) 
{
    return this->vec[i];
}

另外,this->member(*this).member的简写,要经常使用它!

(*this)[i]功能等同于(*this).operator[](i)

因此调用Matrix::operator[](i)。由于这发生在操作符函数本身内,因此该函数将无条件地递归调用自身。这意味着它会一直调用自己,直到内存耗尽,在某些系统上,这会导致系统异常。

假设Matrix有一个类型为std::vector<double>的成员,您可能需要使用that_member[i](它调用vector的operator[])而不是(*this)[i]