Как перегрузка оператора arrow-> работает внутри C++?

Я понимаю обычную перегрузку операторов. Компилятор может напрямую транслировать их в вызов метода. Я не очень понимаю оператор ->. Я писал свой первый пользовательский итератор и почувствовал потребность в операторе ->. Я взглянул на исходный код 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, используя ее оператор ->.

Правильно ли я понимаю?

39
задан nostalgk 14 August 2018 в 17:32
поделиться