Static_Cast és Dynamic_Cast költsége
2014-04-04T14:13:09+02:00
2014-04-04T17:46:56+02:00
2022-07-19T02:42:10+02:00
  • Régi cikk, de ez van első google találatok között:
    C++ dynamic_cast Performance << A howl on the wind...
    Erre is érdemes lehet rápillantani.

    Mint a commentek között ott is szerepel a reinterpret_cast igazából 'valószínűleg' nem jár overhead-el..
    De azért az arányok viszonyításához jó lehet
    Mutasd a teljes hozzászólást!
  • A

    static_cast<T>(e)

    az költséges, ha a T egy objektum, hisz ott új temporary jön létre egy copy konstruktorból, de ilyet elég ritkán csinálnak

    Ellenben a

    static_cast<T*>(e)

    esetén csak a pointert castoljuk, aminek semmilyen költsége nincsen, kivéve ha többszörös öröklődés van az objektumban, akkor léptethet valamennyit a pointeren.

    A dynamic_cast az a rendkívül költséges, az sokszor egy sztring összehasonlításba torkollik minden hierarchia szinten.

    Hogy az eredeti kérdésre válaszoljak static_cast az többnyire noop, azaz nem jár műveletvégzéssel, ezért eltárolni sincs sebesség szempontjából értelme. Többszörös öröklődésnél már elvileg lenne, de gyakorlatilag a fordító azt is kioptimizája, így ez az egész csak coding style.
    Mutasd a teljes hozzászólást!
  • C++ static_cast runtime overhead - Stack Overflow

    "static_cast<T>(e) is equivalent to creating an invented temporary variable v in the following way:

    T v(e); //where T is an arbitrary type and e is an arbitrary expression.
    The runtime cost of a static_cast is exactly the cost of the above statement"


    Én ezt elhiszem. De legegyszerűbb, ha leellenőrzöd magad :)

    ui: Tehát jobban megéri egyszer cast-olni, bár eltudom képzelni, hogy léeg okos a fordító és észreveszi és amúgy is csak 1xer castolna!
    Mutasd a teljes hozzászólást!
  • Bocs a kinézetért, de nálam valahogy hülyül a texteditor.
    Mutasd a teljes hozzászólást!
  • Egyszerű kérdésem lenne, de nem találtam rá választ. Mekkora a static_cast és dynamic_cast költsége, tehát mennyi számítást igényel?

    Érdemesebb eltárolni a végeredményt?

    A* seged = static_cast<A*>(bObject); useSeged(seged->getData(), seged->getData2());

    vagy érdemesebb duplán használni?
    useSeged(


    (
    static_cast<A*>(bObject))
    ->getData(), 


    (static_cast<A*>(bObject))
    ->getData2());




    Melyik az optimálisabb?
    Mutasd a teljes hozzászólást!
Címkék
abcd