witam jaka jest róznica między tymi dwoma kodami?
Player *player = dynamic_cast<Player*>(tmp->thing);
i
Player *player = (Player*)(tmp->thing);
witam jaka jest róznica między tymi dwoma kodami?
Player *player = dynamic_cast<Player*>(tmp->thing);
i
Player *player = (Player*)(tmp->thing);
To są różne metody rzutowania. Te z dynamic_cast
to rzutowanie jakiego lepiej używać w C++, natomiast rzutowanie drugie, to rzutowanie w stylu C.
Rzutowanie w stylu C próbuje kolejno te cast
y aplikować:
const_cast
static_cast
reinterpret_cast
Załóżmy, że rzutowanie jest poprawne, czyli tmp->thing
zostało zadeklarowane jako wskaźnik do polimorficznej klasy bazowej klasy Player
. Wtedy w obu przypadkach dostajesz wskaźnik Player*
, przy czym możliwe że C-cast będzie szybszy, bo de facto wykonuje się static_cast
.
Natomiast jeśli rzutowanie jest niepoprawne, to C-cast odpala reinterpret_cast
(bo nie może static_cast
z powodu niezgodności typów) i pewnie dostaniesz śmieci, które Ci wybuchną w twarz przy próbie użycia, natomiast dynamic_cast
zwróci nulla, dzięki czemu można sprawdzić że operacja się nie udała.
Wątek z oryginalnym tytułem powinien wylądować w koszu. Gdyby nie to, że pojawiły się odpowiedzi, tak by się stało. Tym razem poprawiłem tytuł, następnym razem może mi się nie chcieć.