이 문제와 관련된 몇 가지 질문을 보았습니다. 그러나 그들 모두는이 문제를 해결하기위한 STL 특정 트릭을 논의하는 것으로 보입니다. 다음은 간단한 문제의 예입니다. 우리가 어떤 연산자를 오버로드하는 클래스를 사용하는 가정, 표준 : : 벡터 과부하 말 [] 연산자 :조사 식 창에서 과부하 된 연산자로 표현식을 평가할 수 없습니다.
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
auto x = v[0];
이 경우 오버로드 된 연산자 v[0]
를 호출하는 식을 평가하기 위해 노력하고, VC++에서 다음과 같은 오류를 보여줍니다 Watch Window
에서 :
v[0] no operator "[]" matches these operands
내 첫번째 추측은 디버거가 인수의 유형을 알아낼 수 있었다, 그래서 나는 코드에 다음과 같은 수정과 v[(size_type)0]
표현하고이 ((intvector)v)[(size_type)0]
표현식을 평가하는 시도 :
typedef vector<int> intvector;
intvector v;
행운이 없습니다. 다시 같은 오류 메시지가 나타납니다.
운영자 호출의 확장 된 형식 (여기에 올바른 용어인지 확실하지 않음)을 사용하면 작동합니다 : v.operator[](0)
때문에 이상합니다. 그리고 STL 클래스뿐만 아니라 [] 연산자를 오버로드하는 클래스에 대해서도 보편적으로 작동하는 것으로 보입니다.
두 가지 형태로 v[0]
과 v.operator[](0)
은 동일해야하지만 VC++는 다르게 생각하는 것 같습니다. 그들은 정말로 다른가요? VC++ 디버거가 짧은 양식을 평가할 수없는 이유는 무엇입니까? "확장 된"양식에는 아무런 문제가 없습니다. 이 주위에 어떤 방법이 있습니까? 나는 아주 작은 코드를 복사하고 그것을 Watch Window
에서 평가하는 데 익숙하다.
VS는 클래스에 'const' 버전이 하나만 있어도 표시되지 않습니다. 동시에'const' 연산자와 non-'const' 연산자를 모두 구현하는 클래스에서는 잘 작동하지만 연산자는'operator' 키워드를 사용하여 함수로 호출됩니다. 그것이 질문의 요점입니다. – Max