Я понимаю обычную перегрузку операторов. Компилятор может напрямую транслировать их в вызов метода. Я не очень понимаю оператор ->. Я писал свой первый пользовательский итератор и почувствовал потребность в операторе ->. Я взглянул на исходный код stl и реализовал свой собственный:
MyClass* MyClassIterator::operator->() const
{
//m_iterator is a map<int, MyClass>::iterator in my code.
return &(m_iterator->second);
}
Затем я могу использовать экземпляр MyClassIterator, например:
myClassIterator->APublicMethodInMyClass().
Похоже, компилятор выполняет здесь два шага. 1. Вызовите метод ->() для получения временной переменной MyClass*. 2. Вызовите APublicMethodInMyClass для переменной temp, используя ее оператор ->.
Правильно ли я понимаю?