MEC++: conversioni implicite

Appunti tratti dalla rilettura di More Effective C++ di Scott Meyers. Secondo blocco: Operatori.

(5) Limita le funzioni custom per la conversione

Ci sono due modi per convertire un tipo custom in un altro: per mezzo di una chiamata al costruttore, o per mezzo dell'operatore di conversione implicita di tipo.

Ad esempio, il costruttore di una classe Name che converte una stringa in un oggetto di tipo Name avrà una signature di questo tipo:

Name::Name(const string& s);

Un operatore di conversione implicita di tipo sarà dichiarato ad esempio in questo modo:

class Rational {
public:
// ...
operator double() const;
}

Il problema é che l'operatore di conversione implicita viene chiamato, per l'appunto, implicitamente dal compilatore. E questo può rendere oscuro il comportamento del codice.

Per questo motivo si tende a preferire la conversione esplicita a quella implicita - quindi una funzione asDouble() invece di un operator double().

Per evitare che il costruttore venga utilizzato implicitamente lo si può marcare con la parola chiave explicit.

Nessun commento:

Posta un commento