Jaka jest różnica między sposobami rzutowania?

0

witam jaka jest róznica między tymi dwoma kodami?

 		
		Player *player = dynamic_cast<Player*>(tmp->thing);

i

  Player *player = (Player*)(tmp->thing);
0

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.

3

Rzutowanie w stylu C próbuje kolejno te casty 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.

0

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

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