Wenn static_cast und reinterpret_cast funktioniert - welches nehmen?



  • Wenn man einen Code hat in dem static_cast und reinterpret_cast genau das selbe verursachen, welches sollte man dann bevorzugen?

    z.B. bei

    void* p1 = NULL;
    void* p2 = static_cast<char*>(p1) + 1000;
    void* p3 = reinterpret_cast<char*>(p1) + 1000;
    


  • Wenn static_cast geht, dann nimm es.
    So hab ich das zumindest gelernt.
    Static_cast gibt auch Fehler aus, wenn die Konvertierung nicht möglich ist.
    Reinterpret_cast macht es einfach.

    Gruß
    Don06



  • Im Allgemeinen static_cast<> - da bietest du dem Compiler noch die Chance, ein paar Fehler abzufangen. Aber so, wie du das angewendet hast, ist beides Müll (p1 zeigt kontrolliert auf NULL, p2 und p3 zeigen irgendwo in den Speicher).


  • Mod

    Das ist sowieso so ziemlich der einzige Fall abgesehen von Exoten wie unten, bei dem sich beide Casts gleich verhalten. Da es hier um die Umkehrung einer impliziten Konvertierung geht, ist im Grunde static_cast angebracht. Es existieren aber auch Fälle, bei denen ein reinterpret_cast logischer erscheint.
    Spaß mit casts:

    struct Foo
    {
        operator int&() { return reinterpret_cast< int& >( *this ); }
    };
    
    Foo bar;
    assert( static_cast< int& >( bar ) == reinterpret_cast< int& >( bar ) );
    

Log in to reply