jaka jest różnica pomiędzy
const int d=1;
const int *p = &d;
i
const int d=1;
int const *p = &d;
Co mogę zrobić z pierwszym i drugim?
Odpowiedzi:
4 dla odpowiedzi № 1Nie ma różnicy, są całkowicie identyczne.
Gramatyka języka po prostu pozwala napewna ilość swobody dla niektórych konstrukcji i kwalifikacja CV jest jedną z tych sytuacji. Istnieją inne przykłady (np. Deklaracje takie jak foo typedef int;
).
0 dla odpowiedzi nr 2
const int *p;
Powyższa deklaracja deklaruje wskaźnik p
wskazuje to na stałą int
. Innymi słowy, możesz „zmienić wartość odwołania, ale możesz zmienić p
samo.
int* const p;
Powyższa deklaracja deklaruje stały wskaźnik p
to wskazuje na int
. Innymi słowy, możesz zmienić wartość odwołania, ale nie możesz go zmienić p
. Również,
const int d = 1;
int * const p = &d;
nie jest legalne. Biorąc adres d
plony const int*
i kowersja z const int*
do int*
jest niedozwolone (można niezamierzenie zmienić wartość stałego obiektu, jeśli taki był).
Możesz dokonać konwersji jawnie, używając const_cast
:
const int d = 1;
int * const p = const_cast<int*>(&d);
ale wciąż byłoby nielegalne (niezdefiniowane zachowanie) zmiana wartości d
przez p
.
0 dla odpowiedzi № 3
const int *p;
p
jest wskaźnikiem do stałej liczby całkowitej. Możesz zmienić wartość zapisaną w p
(stąd wskazuje gdzie indziej), ale nie możesz zmienić wartości gdzie p
punkty dla.
int* const p;
p
jest stałym wskaźnikiem do niezmiennej liczby całkowitej. Nie możesz zmienić wartości p
, ale zmień liczbę całkowitą, na którą wskazuje