in Zeitkritischer Anwendung casten



  • im Forum hab ich schon gefunden, dass man von einem dynamic_cast in zeitkritischen Anwendung die Finger lassen soll.
    Wie sieht das bei einem static_cast aus?



  • Wenn ich mich richtig entsinne ist ein static Cast genauso wie ein stupider C-Cast, also der zwängt das zu castende Objekt wirklich einfach 1:1 in sein neues Gewand.

    Dass dynamic_cast in zeitkritischen Anwendungen nicht benutzt werden sollte, ist mir allerdings neu. Jedoch sollte man's nach Möglichkeit garnicht verwenden (müssen) 😉



  • Hallo

    ein static_cast wird zur Compilezeit ausgewertet und geprüft.
    Ein dynamic_cast hingegen wird zur Laufzeit ausgewertet und geprüft, und deshalb ist die RTTI zu verwenden und zur Laufzeit benötigt der dynamic_cast eine minimale Ausführung.

    bis bald
    akari



  • Hallo Mensch,

    einen static_cast kannst du eigentlich problemlos benutzen. Du solltest zwar generell versuchen Casts zu vermeiden, aber wenn du nicht drumrum kommst und der Casts der richtige ist, dann nimm ruhig static_cast. Der kostet uU zwar auch Laufzeit, aber wirklich nicht mehr als tatsächlich notwendig ist. Und es wird auch keine Gültigkeitsprüfung wie bei dynamic_cast durchgeführt (weshalb dieser für zeitkritsche Sequenzen auch nicht unbedingt empfohlen wird). Dementsprechend fatale Folgen kann das aber haben. Also immer schön aufpassen bei der Benutzung und dann kann da eigentlich auch nichts schiefgehen.



  • LordJaxom schrieb:

    Wenn ich mich richtig entsinne ist ein static Cast genauso wie ein stupider C-Cast, also der zwängt das zu castende Objekt wirklich einfach 1:1 in sein neues Gewand.

    Nope. Der "dumme Cast" ist der reinterpret_cast. Der static_cast arbeitet auf Typebene und sorgt dafür, dass beim Casten auch das richtige rauskommt (vorausgesetzt man hat vorher nicht den Compiler belogen, was die Typen angeht).

    Der static_cast wird auch nicht immer zur Compilezeit ausgeführt. Das static bezieht sich auf die Typinformation, die selbstverständlich zur Compilezeit feststeht und nicht zur Laufzeit rausgesucht werden muss. Nichtsdestotrotz kann der eigentliche Cast eine Laufzeitoperation sein. Bsp: Downcast in einer MI-Hierarchie. Hier findet die nötige Offset-Anpassung in der Regel erst zur Laufzeit statt. Zur Compilezeit wird nur festgelegt, wie groß die Offset-Anpassung ist.


Anmelden zum Antworten