(klasa*)NULL - co to znaczy?

0

Witam,
mam problem ze zrozumieniem następującego zapisu, który znalazłem w jednej z analizowanych przeze mnie klas:

class klasa{
*klasa_x zmienna;
//...

klasa_x(...){
zmienna = (klasa_x*)NULL;
//
}
}

Czy może mi ktoś wyjaśnić o co chodzi z tym NULL-em koło nawiasu, które jest bez żadnego operatora... Jak należy to interpretować?

0

Zacznij tutaj: http://c-faq.com/null/index.html Zobacz np. pytania 5.2, 5.6.

Ogólnie chodzi o to, że w szczególnych przypadkach kompilator mógłby nie wiedzieć, że chodzi Ci o zerowy wskaźnik. Ten który podałeś akurat się do nich nie zalicza.
W C++ takie coś jest w ogóle niepotrzebne, bo w C++11 jest nullptr, które zawsze oznacza zerowy wskaźnik.

0

NULL to zero...
http://www2.research.att.com/~bs/bs_faq2.html#null

edit: gafa

Użycie pointera który nie prowadzi tam gdzie powinien może zaowocować segfaultem... albo może przejsć po cichu, jeśli przypadkiem adres był prawidłowy i dostępny w programie. Jeśli przypisze się najpierw nulla, można później gdzieś w kodzie przed użyciem zmiennej sprawdzić if(zmienna == NULL) i zasygnalizować błąd... bez przypisania nulla wcześniej nie można byłoby sprawdzić czy zmienna została już przypisana czy jeszcze nie

0

Witam, dzięki za info.
Ale w takim razie rozumiem, że zapis:

(klasa_x*)NULL;

jest tożsamy z tym:

 (klasa_x*) = NULL;
//lub po prostu:
(klasa_x*) = 0;

Czy może się mylę?

0

teraz mieszasz nazwę typu z nazwą zmiennej.

taki zapis

klasa_x *zmienna;
zmienna = (klasa_x*)NULL;

jest równoważny z

zmienna = (klasa_x*)0;
zmienna = NULL;
zmienna = 0;

a według nowego standardu należy pisać

zmienna = nullptr;
0

No tak! Masz rację! dzięki!

1 użytkowników online, w tym zalogowanych: 0, gości: 1