Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Różnice w sposobach rzutowania

Ostatnio zmodyfikowano 2017-08-11 17:33
Autor Wiadomość
Lich555
Temat założony przez niniejszego użytkownika
Różnice w sposobach rzutowania
» 2017-08-11 12:15:16
Witam.
Czy jest jakaś różnica między tymi dwoma zapisami?
C/C++
srand( static_cast < unsigned >( time( NULL ) ) );
a tym:
C/C++
srand(( unsigned )( time( NULL ) ) );
P-163903
jankowalski25
» 2017-08-11 12:34:29
Pierwszy zapis jest zalecany, ponieważ ułatwia znalezienie rzutowań w kodzie (które są miejscami potencjalnych błędów). Zwykle są do tego używane szablony i dzięki temu można utworzyć własne rzutowania
foo_cast
, które dodatkowo będą jeszcze coś robiły, w zależności od potrzeb (taki szablon można rozbudowywać tak, jak każdą inną klasę). Bodajże kiedyś Elaine zaimplementował
dynamic_cast
.

Drugi zapis to rzutowania w stylu C, które są niezalecane w C++, jednak zostały zachowane ze względu na zgodność wsteczną z C.
P-163904
mokrowski
» 2017-08-11 14:13:27
Rzutowanie w projekcie, zawsze jest oznaką pewnego kompromisu lub stosowania specjalnej techniki. Takie rzutowanie warto wykryć. Łatwym sposobem będzie wyodrębnienie czytelnego zapisu takiego rzutowania.
Poza tym rzutowanie poprzez szablon, jasno pokazuje intencję takiego rzutowania. Czy jest to konieczność rzutowania "w dół drzewa dziedziczenia", czy pozbycie się const z typu czy może bezpieczna konwersja typu (np. na typ szerszy).
Rzutowanie "w stylu C", jest nie jasną (co do intencji) kombinacją static_cast, const_cast oraz reinterpret_cast.
P-163905
Elaine
» 2017-08-11 14:26:11
Rzutowanie "w stylu C", jest nie jasną (co do intencji) kombinacją static_cast, reinterpret_cast oraz dynamic_cast.
Rzutowanie w stylu C nigdy nie użyje dynamic_cast.
P-163907
mokrowski
» 2017-08-11 15:26:39
Oczywiście masz rację... poprawione na reinterpret_cast co jest zgodne z działaniem. Moja pomyłka.
P-163908
Elaine
» 2017-08-11 15:54:50
Rzutowanie "w stylu C", jest nie jasną (co do intencji) kombinacją static_cast, reinterpret_cast oraz reinterpret_cast.
reinterpret_cast zapłaciło więcej, więc jest dwa razy?
P-163909
mokrowski
» 2017-08-11 17:33:10
Tak. Zapłaciło więcej..;) Ale za mało na 4 razy;)
P-163918
« 1 »
  Strona 1 z 1