Stavo leggendo di casts in c ++ e mi sono confuso su come sono effettivamente valutate le espressioni. Considera il seguente codice in cui var
è di tipo int
e dopo l'espressione var = (var*10)/10
la memoria di var
viene overflow:
#include<iostream.h>
void main()
{
int var = 25000; // signerd int varies from -32768 to 32767
var = (var*10)/10; // seems like (var*10) is stored in the memory allocated 'var'
cout << "Incorrect value of var is:" << var << endl;
var = (long(var)*10)/10;
cout << "correct value of var is:" << var << endl;
}
Il valore errato mostrato è -1214 e il corretto è, come previsto, 25000. Sono molto confuso su come viene effettivamente valutata l'espressione var = (var*10)/10;
. Il compilatore valuta l'espressione passo dopo passo in modo che il risultato della prima operazione [(var * 10)] eseguita sul valore numerico di var
sia memorizzato nella memoria allocata, quindi il valore memorizzato in tale spazio di memoria viene utilizzato per ulteriori operazioni da eseguire.
Il mio jerk al ginocchio era che il compilatore calcolava direttamente il valore (var * 10), quindi divide questo valore con 10, ma questo non sembra essere il caso.
Quindi la domanda è,
- How are expressions, in general and for my specific example, evaluated in C++?
P.S: So che sto usando un dialetto obsoleto del linguaggio C ++ e del compilatore C ++.