02.06.2013 Views

CORSO C++ STANDARD - Didattica.it

CORSO C++ STANDARD - Didattica.it

CORSO C++ STANDARD - Didattica.it

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

float(n) é equivalente a (float)n<br />

va detto che il function-style casting non è sempre possibile (per esempio con i<br />

puntatori non si può fare).<br />

Tutti i tipi nativi consentono il casting, fermo restando il fatto che, se la<br />

variabile da trasformare è operando di una certa operazione, il tipo risultante<br />

deve essere fra quelli ammissibili (altrimenti viene generato un errore in<br />

compilazione). Per esempio: float(n) % 3 é errato in quanto l'operatore %<br />

ammette solo operandi interi.<br />

Vediamo ora un esempio in cui si evidenzia la necess<strong>it</strong>à del casting:<br />

int m=10, n=4;<br />

float r, a=2.7F;<br />

r = m/n+a;<br />

nell'ultima istruzione la divisione è fra due numeri interi e quindi, essendo i due<br />

operandi dello stesso tipo, la conversione implic<strong>it</strong>a non viene esegu<strong>it</strong>a e il<br />

risultato della divisione è il numero intero 2; solo successivamente questo<br />

numero viene convert<strong>it</strong>o in modo implic<strong>it</strong>o in 2.0 per essere sommato ad a. Se<br />

vogliamo che la conversione a float avvenga prima della divisione, e che<br />

questa fornisca il risultato esatto (cioè 2.5), dobbiamo convertire<br />

esplic<strong>it</strong>amente almeno uno dei due operandi e quindi riscrivere così la terza<br />

istruzione:<br />

r = (float)m/n+a; (non servono altre parentesi perchè il casting ha la precedenza<br />

sulla divisione)<br />

Il casting che abbiamo esaminato finora è quello del C (C-style casting). Il<br />

<strong>C++</strong> ha aggiunto altri quattro operatori di casting, suddividendo le conversioni<br />

di tipo in altrettante categorie e riservando un operatore per ciascuna di esse<br />

(per fornire al compilatore strumenti di controllo più raffinati). D'altra parte il Cstyle<br />

casting (che li comprende tutti) è ammesso anche in <strong>C++</strong>, e pertanto non<br />

tratteremo in questo corso degli altri operatori di casting, lim<strong>it</strong>andoci a fornirne<br />

l'elenco:<br />

static_cast(E)<br />

dynamic_cast(E)<br />

reinterpret_cast(E)<br />

const_cast(E)<br />

dove è E un'espressione qualsiasi il cui tipo è convert<strong>it</strong>o nel tipo T.<br />

Precedenza fra operatori

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!