c++重载操作符堆栈溢出
c++ overloading operator stack overflow
我试图重载[]
操作符。我得到一个未处理的异常错误。我正在使用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]
。
相关文章:
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- C++ 对象数组堆栈溢出
- 有没有一种方法可以捕获进程中的堆栈溢出?C++Linux
- 对象接收堆栈溢出异常 c++ 的排序向量
- 将公共递归转换为尾递归,因为大型输入的堆栈溢出
- C++ 中递归期间的堆栈溢出
- 启动 dll 时 C# 环境堆栈溢出
- 在C++中使用数组时如何防止堆栈溢出?
- 如何修复递归函数导致的堆栈溢出错误?C++
- 当我尝试为结构分配新指针时出现堆栈溢出错误
- 为什么析构函数无休止地调用自己(导致堆栈溢出)?
- 为什么堆栈溢出?如有建议,不胜感激
- 主函数执行时C++堆栈溢出异常
- 如何在不导致堆栈溢出的情况下计算非常大的数字和很小的 HCF.我正在使用欧几里得算法
- 递归克隆图时的堆栈溢出
- 防止 CRTP 特征码在"pure virtual"调用中堆栈溢出
- 静态数组溢出堆栈(seg 错误 11)仅在类定义内部时,否则不会..?
- 使用递归的溢出堆栈
- c++中栈溢出和分段错误的危险