6

Zum Beispiel:Ist ein Versuch, ein const_cast-ed, aber dynamisch zugewiesenes konstantes Objekt noch undefiniert Verhalten zu ändern?

const int* pc = new const int(3);  // note the const 
     int* p = const_cast<int*>(pc); 

*p = 4; // undefined behavior? 

Insbesondere kann der Compiler immer die Haufen*pc -allocated optimieren weg?

Wenn nicht, ist ein Versuch, *pc über p zu ändern, immer noch undefiniertes Verhalten - und wenn ja, warum?

+0

Es ist eine interessante Frage, aber warum sollten Sie das tun? –

+0

verwandt - http://Stackoverflow.com/questions/22798558/is-it-legal-to-modify-an-object-created-with-new-through-a-const-pointer –

+1

const_cast sollte nur für die Schnittstelle verwendet werden mit Code, der const-incorrect ist, zum Beispiel eine Funktion, die keinen String ändert, aber immer noch char * anstelle von const char *. Jede andere Art der Verwendung, bei der Sie das Objekt ändern, ist ein nicht definiertes Verhalten – KABoissonneault

Antwort

4

Ja und ja. Warum - weil Sie ein const Objekt ändern.

Und guter Punkt über die const nach new - ohne sie wäre der Code legal.

3

const_cast von const zu nicht const ist nur sicher, wenn der ursprüngliche Zeiger nicht const war.

Wenn der ursprüngliche Zeiger const ist (wie in Ihrem Beispiel), ist das Verhalten nicht definiert.

Wenn Sie

geschrieben hatte

const int* pc = new int(3);

Sie dann konnte die const -ness von pc wegzuwerfen.

Verwandte Themen