Chciałem wiedzieć, dlaczego nie jest to ostatnie stwierdzenieważne? Jestem trochę mylony z informacjami o błędach i doceniłbym to, gdyby ktoś mógł wyjaśnić błąd. Wiem, że poniższy kod nic nie robi. Właśnie eksperymentuję z próbą ulepszenia moich koncepcji. Chcę utworzyć alias dla wskaźnika p
int a =12;
int * const p = &a; //p is a constant pointer to an int - This means it can change the contents of an int but the address pointed by p will remain constant and cannot change.
int *& const m = p; //m is a constant reference to a pointer of int type <---ERROR
To są błędy, które dostaję
main.cpp:17:18: error: "const" qualifiers cannot be applied to "int*&"
int *& const m = p;
^
main.cpp:17:22: error: binding "int* const" to reference of type "int*&" discards qualifiers
int *& const m = p;
Czy ktoś mógłby wyjaśnić, co oznaczają dwa błędy, szczególnie ostatni, i czy jest możliwe utworzenie aliasu dla wskaźnika p.
Odpowiedzi:
5 dla odpowiedzi № 1"const" qualifiers cannot be applied to "int*&"
Referencje nie mogą być ponownie powiązane po ich utworzeniuzainicjowano. Nie ma więc powodu, aby umieszczać kwalifikator const w referencji (nie mylić z referencją do const, co jest całkowicie normalne), ponieważ i tak nie można go zmienić. To jest powód pierwszego błędu.
W przypadku drugiego błędu
binding "int* const" to reference of type "int*&" discards qualifiers
p
jest stałym wskaźnikiem, ale próbujesz powiązać z nim odwołanie do non-const. Pozwoliłoby to zmienić wskaźnik const za pomocą odwołania, co nie jest dozwolone.
Oto właściwy sposób na odniesienie p
:
int * const& m = p;
3 dla odpowiedzi № 2
Posługiwać się
int a =12;
int* const p = &a;
int* const& m = p;
To określa m
być odniesieniem do const
wskaźnik do int
.
0 dla odpowiedzi № 3
Rozważ dwie następujące linie:
int *const & const m = p; //m is a constant reference to a pointer of int type <---ERROR
int *const & m = p; //m is a reference to a pointer to a const int type <--- OK
Twoje komentarze dają odpowiedź. W swoim kodzie definiujesz stałe odniesienie do wskaźnika, co nie ma sensu. Potrzebujesz odniesienia do wskaźnika do const, który jest moją drugą linią.