c ++重载运算符堆栈溢出

时间:2016-10-26 09:07:15

标签: c++

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

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

2 个答案:

答案 0 :(得分:2)

(*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的简写,更经常使用!

答案 1 :(得分:1)

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

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

假设Matrix的成员类型为std::vector<double>,您可能需要使用that_member[i](调用向量&#39; s operator[])而不是{{1} }}