Dipende molto dalla lingua.
La maggior parte delle lingue di funzione di alto livello sono identiche.
Per le lingue interpretate di solito c'è poca differenza (specialmente quando il linguaggio ti permette di scrivere i tuoi operatori (allora è solo zucchero sintattico per una chiamata di metodo), ma poi un linguaggio interpretato tutti gli operatori sono fondamentalmente chiamate di metodo come la lingua è interpretato).
Quando si parla di linguaggi come il C ++, la trama diventa più complessa.
Gli operatori - su tipi primitivi sono non come chiamate di metodi.
Gli operatori - sui tipi di classe sono proprio questo: chiamate di metodo.
C'è una distinzione importante in quanto ciò può modificare il comportamento atteso intrinseco dell'operatore. Ad esempio il & & e || gli operatori sono operatori di scelta rapida quando vengono utilizzati su tipi primitivi. Ma quando si esegue l'override per una particolare classe, ora sono l'equivalente delle chiamate di metodo e quindi tutti i parametri devono essere valutati prima che venga chiamato il metodo e quindi non sono più operatori di scorciatoia.
Quando usi i metodi (e quindi gli operatori sovraccarichi di classe) hai garanzie specifiche su dove sono i punti di sequenza (quindi alcuni effetti collaterali sono OK). Ma con gli operatori normali di solito non ci sono punti di sequenza fino alla fine dell'espressione (quindi gli effetti collaterali hanno uno scopo molto più ampio per interferire con il resto dell'espressione).