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.