ciao Ashura, grazie per le spiegazioni
Lasciando perdere il fatto che e' abbastanza una porcheria utilizzare il C-cast per togliere il constness di una variabile,
dipende cosa si vuol fare ... in alcuni casi è una porcheria, in altri è un escamotage ... nel mio caso non ti spiego cosa sto facendo perchè andrei (ot) e mi dilungherei troppo ...
Quando il compilatore trova una variabile 'const' non crea nessun 'blocco non modificabile' ( non esiste un concetto del genere ) ma piazza quella variabile nello stack. Si segna pero' nella sua virtual table che quella variabile e' una costante.
il punto è proprio quello, non sapendo(io) come viene tradotto il codice dal compilatore, mi è venuto il dubbio che, definendo una costante e poi andando a modificarla, potessi creare una falla nel sistema ...
Questo mio dubbio è nato rispetto al concetto di ottimizzazione in fase di compilazione, ossia quando il compilatore per render più veloce e "prestante" l'eseguibile, effettua una serie di accorgimenti se vengono utilizzati i flags -O, -O1, -O2, ecc.
In questi casi, magari .. ho pensato, il compilatore per ottimizzare, quando trova un valore const "crea una situazione" che migliora le prestazioni, ma porta a casini in caso non ci si attenga alla dichiarazione iniziale e si cambi il valore ...
Non so se mi sono spiegato ... mi leggo contorto da me (rotfl)
Pero' il bug ce lo puoi mettere te... prendi questo esempio:
Codice: Seleziona tutto
const int len = 50;
char* mystr = (char*)malloc(len);
... codice ...
*((int*)&len) = 100;
memset(mystr, 0, len); // molto bene, hai appena azzerato 50 byte di troppo perche' ti sei fidato della tua costante :)
per fortuna ho già passato da un pò quella fase .... :P
Avvolte cio' che si crea per facilitarci la vita, ci libera dal ragionare ed insieme ci imprigiona in una sorta di limbo nel quale la coscienza è solo un limite, uno spreco di risorse e tempo. Cosa fa' la mia mano ?