003
07.10.2008, 18:15 Uhr
0xdeadbeef
Gott (Operator)
|
Klammersetzung beachten - der static_cast castet das Ergebnis der Modulo-Rechnung nach unsigned int, nicht (279470273ULL * seed). Da 4294967291 = 2³² - 5 < 2^³² ist, passt das in einen vorzeichenlosen 32-bit-Integer, was unsigned int auf heute gängigen Plattformen mindestens ist.
Ansonsten, zum einen ist ein static_cast in seiner Syntax eindeutiger - static_cast<foo>(bar) + baz ist deutlich klarer als (foo) bar + baz - wird da jetzt bar gecastet oder bar + baz? Zum anderen (und viel wichtigeren) kann static_cast keine cv-Qualifier wegcasten, was ihn wesentlich ungefährlicher als die alten C-Casts macht.
Anzumerken ist außerdem, dass static_cast keinerlei Laufzeit-Überprüfung vornimmt, im Gegensatz zu dynamic_cast, welcher dazu gedacht ist, eine Basisklassenreferenz (oder -Zeiger) in eine abgeleitete Klasse umzucasten, und vorher überprüft, ob du überhaupt in den richtigen Typ castest (Allerdings ist das Verlangen, dynamic_cast zu benutzen, in der Regel ein Zeichen für Designfehler). Eine Übersicht über die verschiedenen Casts findest du hier. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |