*ppch = &ch; //błąd **ppch = ch;
void TestConstConst3( char const**ppch)
char ch;
*ppch = &ch;
**ppch = ch; //błąd
Pamiętajmy, że deklarację const stosuje się od lewej do prawej. W funkcji TestConstConstl lewa deklaracja const odnosi się do typu char *. Prawa deklaracja const odnosi się do char **. A zatem w funkcji TestConstConstl ani wskaźnik, ani wskazywany typ znakowy nie mogą się zmienić. Oba przypisania w kodzie wygenerują błędy.
W funkcji TestConstConst2 deklaracja const odnosi się do typu char *. Dlatego też wskazywana zawartość nie może się zmienić. Ale wskaźnik do zawartości może się zmienić. Więc pierwsze przypisanie generuje błąd, ale drugie nie.
W funkcji TestConstConst3 stały jest typ char **. A więc wskazywana zawartość może się zmienić, ale sam wskaźnik nie. Dlatego też pierwsze przypisanie jest poprawne, a drugie wywołuje błąd składniowy.
Przykład: Test Const Const 10. TestConstConst2() oraz TestConstConst3() w pliku misc.cpp
unikanie strat pamięci
Kod źródłowy
template <class T> class IntelWskPodst
private;
lntelWskPodst<T>&operator=(lntelWskPodst<T>&iwp)
return *this;
protected:
T *m_pt; public:
lntelWskPodst(T *pt=NULL) : m_pt(pt)