const_cast



  • Moin,

    was sagt der Standard zum folgenden Beispiel?

    void f (const int& x)
    {
            int* y = const_cast<int*>(&x);
            *y = 9;
    }
    
    int main ()
    {
        f(2);
    }
    

    undefined behaviour?



  • ja

    denn 2 ist eine Konstante, die du nicht aendern darfst (das haben Konstanten so ansich :))



  • Hm, aber das Ding ist ja, daß wenn ich 2 einer Variable zuweise und diese dann der Funktion übergebe, wird das const wunderbar weggecastet und die Variable geändert. Und das wäre ja in diesem Beispiel nicht möglich.

    void f (int& x){} // <- kann ich mit f(bla) aufrufen, nicht mit f(2)



  • Original erstellt von Doktor Prokt:
    **Hm, aber das Ding ist ja, daß wenn ich 2 einer Variable zuweise und diese dann der Funktion übergebe, wird das const wunderbar weggecastet und die Variable geändert. Und das wäre ja in diesem Beispiel nicht möglich.
    **

    achtung:

    der const_cast<> ist durchaus legal. undefiniert ist nur das *y=9 in dem Fall das x eine referenz auf eine Konstante ist.

    Solltest du das beispiel mit

    int i=2;
    f(i);

    aufrufen, ist alles OK.

    Aber dennoch ist const_cast<> gefaehrlich. Ich habe ihn bisher nur ein einziges mal gebraucht... Also du findest zu 99% einen anderen Weg das zu realisieren (was auch immer du vorhast)



  • Jo, danke für deine Hilfe. Daß war auch genau meine frage, daß es mit f(i) geht und obe es mit f(2) undefiniert ist, hab das nur schlecht ausgedrückt :).

    Eigentlich wollte ich das gar nicht benutzen, sondern nur mal wissen, wie diese Problematik nach dem Standard aussieht.


Anmelden zum Antworten