2012-03-19 6 views
16

Przeglądam jakiś kod i natknąłem się na jakiś kod, którego nie znam. Po pewnych poszukiwaniach nie mogłem wymyślić żadnego przykładu, dlaczego tak się dzieje lub korzyści z tej deklaracji.C++ Deklaracja wskaźnika po stępce

myClass const * const myPtr = myClass->getPointer(); 

Czy jest to deklaracja wskaźnika const lub coś zupełnie innego?

Odpowiedz

24

Oznacza to, że "myPtr jest wskaźnikiem const do constmyClass". Oznacza to, że nie można ani zmodyfikować wskaźnika , który wskazuje wskaźnik na za pomocą tego wskaźnika, ani nie można spowodować, że wskaźnik wskaże gdzieś indziej po zainicjowaniu (przez wartość zwracaną myClass->getPointer()). Więc tak, masz w zasadzie rację, z dodatkiem, że to również wskazuje na obiekt const (o ile wiesz, to może naprawdę być pod-const).

Pamiętaj, że const dotyczy pozycji po jej lewej stronie (lub gdy nie ma pozycji po lewej stronie, pozycja po prawej stronie). Pierwszy const powoduje, że const (gdzie nie można zmodyfikować wskaźnika wskazującego na), a drugi const tworzy stałą (gdzie nie można zmodyfikować samego wskaźnika).

+6

„Pamiętaj, że const odnosi się do elementu, po jego lewej stronie (lub jeśli nie ma pozycja po lewej stronie, pozycja po prawej stronie). "- jest to najlepsza, najprostsza i najłatwiejsza zasada, jaką widziałem przy klasyfikacji const. – linbianxiaocao

1

Ten deklaruje stały wskaźnik do stałej wartości, zwrócony przez wywołanie funkcji składowej wskaźnika nieprawidłowego myClass

2

Seth jest na pieniądze. Jest jeszcze więcej tła, które może ci się przydać na Duramecho.

3

Zasadą jest, że słowo kluczowe "const" odnosi się do "słowa" po lewej stronie, chyba że jest to pierwsze słowo w wierszu, w którym to przypadku odnosi się do "słowa" po prawej stronie. A więc: myClass const * const: myClass < - const, wskaźnik < - const, const wskaźnik do const myClass.

Z jakiegoś powodu w większości kodów (przynajmniej tych, które widziałem) zostanie to zadeklarowane jako const myClass * const. Dlaczego nie mam pojęcia, ponieważ teraz musisz wziąć wyjątek od "const odnosi się do słowa po lewej, chyba że to pierwsze słowo na linii" pod uwagę. Np .: pisanie linii, które odbywają się w czytanym przez ciebie kodzie, jest dużo jaśniejsze.

17

W niektórych przypadkach, można zobaczyć to napisane tak:

const myClass * const myPtr = myClass->getPointer(); 

Oba są równoważne, a mianowicie stały wskaźnik do stałego obiektu. Wolę składnię jak pokazaliśmy go, ponieważ jest łatwiejszy do zrozumienia dla początkujących kiedy czytać od prawej do lewej:

Object * const obj;  // read right-to-left: const pointer to Object 
Object const * obj;  // read right-to-left: pointer to const Object 
Object const * const obj; // read right-to-left: const pointer to const Object