C++Sovraccarico dell'operatore


introduzione

In C ++, è possibile definire operatori come + e -> per i tipi definiti dall'utente. Ad esempio, l'intestazione <string> definisce un operatore + per concatenare le stringhe. Questo viene fatto definendo una funzione dell'operatore usando la parola chiave operator .

Osservazioni

Gli operatori per i tipi built-in non possono essere modificati, gli operatori possono essere sovraccaricati solo per i tipi definiti dall'utente. Cioè, almeno uno degli operandi deve essere di un tipo definito dall'utente.

I seguenti operatori non possono essere sovraccaricati:

  • L'accesso membro o l'operatore "punto" .
  • Il puntatore all'operatore di accesso membro .*
  • L'operatore di risoluzione dell'oscilloscopio, ::
  • L'operatore condizionale ternario, ?:
  • dynamic_cast , static_cast , reinterpret_cast , const_cast , typeid , sizeof , alignof e noexcept
  • Le direttive di preelaborazione, # e ## , che vengono eseguite prima che qualsiasi tipo di informazione sia disponibile.

Ci sono alcuni operatori che non si dovrebbe (99,98% del tempo) di sovraccarico:

  • && e || (preferire, invece, usare la conversione implicita in bool )
  • ,
  • L'indirizzo-dell'operatore (unario & )

Perché? Perché sovraccaricano gli operatori che un altro programmatore non si aspetterebbe mai, comportando un comportamento diverso da quello previsto.

Ad esempio, l'utente ha definito && e || sovraccarichi di questi operatori perdono la loro valutazione di corto circuito e perdono le loro proprietà sequenziamento speciali (C ++ 17) , il numero di sequenza si applica anche a , overload dell'operatore.

Sovraccarico dell'operatore Esempi correlati