Conversione del tipo di dati.
Le variabili di tipi di dati diversi possono essere convertite tra loro specificando il tipo di dati richiesto tra parentesi prima della conversione della variabile: (tipo_dati) variabile. Il risultato restituirà una variabile con un nuovo tipo di dati, mentre il tipo di dati della variabile stessa non cambierà (funziona all'interno di una singola azione):
// tipo variabile.
byte
byte val = 10;
// passare a una funzione che si aspetta un int.
int
sendVal( (int)val );
In questo modo è possibile convertire variabili ordinarie, puntatori e altri tipi di dati.
Per le stringhe abbiamo già considerato qui.
toInt()
toFloat()
toCharArray()
A volte puoi trovare la conversione del tipo tramite l'operatore cast.
- reinterpret_cast - digita casting senza controllo, indicazione diretta al compilatore. Viene utilizzato solo se il programmatore è completamente sicuro delle proprie azioni. Non rimuove const e volatile, viene utilizzato per eseguire il cast di un puntatore a un puntatore, un puntatore a un numero intero e viceversa.
- static_cast - esegue il cast di espressioni di un tipo statico in oggetti e valori di un altro tipo statico. È supportata la conversione di tipi numerici, puntatori e riferimenti in alto e in basso nella gerarchia di ereditarietà. La conversione viene verificata a livello di compilazione e in caso di errore di typecast verrà visualizzato un messaggio.
- dynamic_cast - utilizzato per il cast di tipi dinamici in fase di esecuzione. In caso di cast di tipo errato per i riferimenti, viene generata un'eccezione std::bad_cast e verrà restituito 0 per i puntatori.
- const_cast - è il casting di tipo più semplice. Rimuove const e volatile, ovvero costanza e rifiuto di ottimizzare la variabile da parte del compilatore. Questa conversione viene verificata a livello di compilazione e verrà emesso un messaggio in caso di errore di typecast.
Modalità d'uso: utilizzando l'esempio precedente.
// tipo variabile.
byte
byte val = 10;
// passare a una funzione che si aspetta un int.
sendVal( static_cast<int>(val) );
