Diverse lingue definiscono le parole "cast" e "convert" in modo diverso; Non penso che la domanda sia significativa se non in riferimento a un particolare linguaggio.
In C, ad esempio, il termine "cast" si riferisce correttamente solo a un operatore di cast esplicito, costituito da un nome di tipo tra parentesi che precede l'espressione da convertire. Una "conversione" converte un valore di un tipo in un valore di un altro tipo; alcune conversioni vengono implementate reinterpretando i bit che costituiscono la rappresentazione, ma è definita come una conversione da valore a valore. (Sì, è vero anche per le conversioni puntatore: è possibile che diversi tipi di puntatore abbiano rappresentazioni differenti.)
Nota che non esiste una cosa come un "cast implicito" in C.
Alcune conversioni sono esplicite, specificate da un operatore di cast. Gli altri sono impliciti e vengono applicati in alcuni casi quando un'espressione di un tipo viene utilizzata in un contesto che richiede un'espressione di un tipo diverso. La conversione eseguita è esattamente la stessa in entrambi i casi.
Ad esempio:
double x = 1.23;
int y = (int)x; /* A cast, or explicit conversion, setting y to 1 */
int z = x; /* An implicit conversion, setting z to 1. */
C ++ è simile; ha gli stessi cast e conversioni di C, e aggiunge una notazione funzionale equivalente a un'espressione cast in stile C, più 4 parole chiave più specifiche: const_cast
, dynamic_cast
, reinterpret_cast
e static_cast
.