Tôi hiểu quá tải toán tử bình thường. Trình biên dịch có thể dịch chúng sang phương thức gọi trực tiếp. Tôi không rõ lắm về toán tử ->. Tôi đã viết iterator tùy chỉnh đầu tiên của tôi và tôi cảm thấy cần sự điều hành ->. Tôi đã xem xét mã nguồn STL và thực hiện của riêng tôi như nó:Cách thức hoạt động của arrow-> overload trong nội bộ C++?
MyClass* MyClassIterator::operator->() const
{
//m_iterator is a map<int, MyClass>::iterator in my code.
return &(m_iterator->second);
}
Sau đó, tôi có thể sử dụng một thể hiện của MyClassIterator như:
myClassIterator->APublicMethodInMyClass().
Hình như trình biên dịch thực hiện hai bước ở đây. 1. Gọi phương thức ->() để nhận biến MyClass * tạm thời. 2. Gọi APublicMethodInMyClass trên biến tạm thời sử dụng toán tử ->.
Sự hiểu biết của tôi có đúng không?
Thực ra đó là 'myClassIterator.operator ->() -> APublicMethodInMyClass()' –
Cảm ơn bạn đã giải thích. Nên myClassIterator.operator ->() APublicMethodInMyClass() là myClassIterator.operator ->() -> APublicMethodInMyClass()? Kiểu trả về của ->() là MyClass * – Ryan
đã nhận. Cảm ơn Seth. – Ryan