biowep
22-10-2014, 15:53
Salve, sto studiando il C++ e mi sono imbattuto in una discussione si stackoverflow dove viene spiegata la differenza tra mettere la keyword const in una posizione piuttosto che in un'altra.
http://stackoverflow.com/questions/1143262/what-is-the-difference-between-const-int-const-int-const-int-const?answertab=active#tab-top
Quello che non capisco è il caso in cui invece di una singola dichiarazione faccio una dichiarazione di variabili multipla.
int main() {
int v = 12345;
int * const p1 = &v;
int * const * const a = &p1, b = v;
cout << **a << ", " << b << "\n";//output: "12345, 12345"
}
Nell'esempio a è una roba assurda mentre b è un semplice int. Strano, molto strano, ma posso capire.
Ora facciamo un altro esempio
int main() {
const int * c = &v, d = v;
cout << *c << ", " << d << "\n";
//d = 50;//error: assignment of read-only variable 'd'
}
In questo caso c è un puntatore ad un intero costante mentre d è un intero costante, WHAT????
Perché se metto "const" prima dovrebbe far parte del tipo mentre se lo metto dopo non fa parte del tipo? Che mente malata bisogna avere per inventare una sintassi tanto difficile, piena di particolarità e casi speciali?
Quale è il criterio, nel caso di dichiarazione di più variabili? Intendo: come posso sapere a priori cosa fa parte del tipo e cosa no, senza fare dei test, solo leggendo il codice.
http://stackoverflow.com/questions/1143262/what-is-the-difference-between-const-int-const-int-const-int-const?answertab=active#tab-top
Quello che non capisco è il caso in cui invece di una singola dichiarazione faccio una dichiarazione di variabili multipla.
int main() {
int v = 12345;
int * const p1 = &v;
int * const * const a = &p1, b = v;
cout << **a << ", " << b << "\n";//output: "12345, 12345"
}
Nell'esempio a è una roba assurda mentre b è un semplice int. Strano, molto strano, ma posso capire.
Ora facciamo un altro esempio
int main() {
const int * c = &v, d = v;
cout << *c << ", " << d << "\n";
//d = 50;//error: assignment of read-only variable 'd'
}
In questo caso c è un puntatore ad un intero costante mentre d è un intero costante, WHAT????
Perché se metto "const" prima dovrebbe far parte del tipo mentre se lo metto dopo non fa parte del tipo? Che mente malata bisogna avere per inventare una sintassi tanto difficile, piena di particolarità e casi speciali?
Quale è il criterio, nel caso di dichiarazione di più variabili? Intendo: come posso sapere a priori cosa fa parte del tipo e cosa no, senza fare dei test, solo leggendo il codice.