/ / Tworzenie aliasu dla stałego wskaźnika - c ++

Tworzenie aliasu dla stałego wskaźnika - c ++

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ą.