Eu entendo mais sobrecarga de operadores, com excepção dos operadores de acesso membro ->
, .*
, ->*
etc.
Em particular, o que é passado para essas funções do operador e o que deve ser retornado?
Como o operador funciona (por exemplo operator->(...)
) sabe a que membro está sendo referido? Ele pode saber? Precisa mesmo saber?
Finalmente, existem considerações constantes que precisam ser levadas em consideração? Por exemplo, ao sobrecarregar algo como operator[]
, geralmente você precisará de uma versão const e não-const. Os operadores de acesso a membros exigem versões const e não-const?
const
e não const
versões operator->
não são necessárias , mas fornecer ambos pode ser útil.
->*
e .*
. Na verdade, nem sequer os menciona! Eu sinto que eles são raros em estar em uma FAQ, mas gostaria de vincular esta pergunta a partir da FAQ. Por favor, não feche isso como uma fraude do FAQ!