[]
연산자를 오버로드하려고합니다. 처리되지 않은 예외 오류가 발생합니다. vector<double>
을 사용하여 매트릭스 클래스를 구현하려고합니다.연산자 오버로드 오버플로 연산자 오버플로
double& Matrix::operator[](int i)
{
return (*this)[i];
}
[]
연산자를 오버로드하려고합니다. 처리되지 않은 예외 오류가 발생합니다. vector<double>
을 사용하여 매트릭스 클래스를 구현하려고합니다.연산자 오버로드 오버플로 연산자 오버플로
double& Matrix::operator[](int i)
{
return (*this)[i];
}
(*this)
은 Matrix
개체를 반환합니다. 따라서 (*this)[i]
은 Matrix::operator[](i)
으로 전화합니다. 함수는 다음과 같은 종료 조건없이 자체적으로 호출합니다.
int foo() {
return foo();
}
여러분이 상상할 수있는 것처럼 아주 빨리 충돌합니다.
구성원 변수에서 std::vector::operator[]
으로 전화를 걸 수도 있습니다. ,
double& Matrix::operator[](int i)
{
return this->vec[i];
}
또한, this->member
는 속기가 (*this).member
위해 더 자주 사용 : 클래스는, vec
라는 개인 벡터 객체가있는 경우 예를 들어, 수행 할 수 있습니다!
(*this)[i]
은 기능적으로 (*this).operator[](i)
과 같습니다.
그러므로 Matrix::operator[](i)
을 호출합니다. 그것은 연산자 함수 자체 내에서 발생하기 때문에 함수는 무조건 자체를 재귀 적으로 호출합니다. 즉, 일부 시스템에서는 시스템 예외가 발생하여 메모리가 고갈 될 때까지 자체 호출을 계속 유지합니다. Matrix
가정
은 아마 당신은 오히려 (*this)[i]
보다 (벡터의 operator[]
를 호출하는) that_member[i]
를 사용할 필요가 입력 std::vector<double>
의 회원이있다.
[고무 오리] (https://en.wikipedia.org/wiki/Rubber_duck_debugging) :'(* this) [i]'에게 무슨 일이 생기는지 설명하십시오. – juanchopanza
재귀처럼 보입니다. – Archie
행렬에 둘 이상의 차원이 있어야하지 않습니까? –