Die Kompilierungsfehler werden verursacht, weil Sie const away const nicht ablegen. Stattdessen kopierst du i0. Für diesen Vorgang ist kein Cast erforderlich:
%Vor% Der Typ, in den Sie einwerfen, sollte eigentlich ein Zeiger oder eine Referenz sein. Andernfalls macht die Verwendung von const_cast keinen Sinn, da Sie es direkt kopieren können. Beispielsweise können Sie für Zeiger die Konstante const wegwerfen, da die Dereferenzierung des Zeigers einen anderen Typ für const T*
( const T
) ergibt als für T*
( T
). Für Referenzen gilt das Gleiche: T&
greift auf das Objekt mit einem anderen this Zeigertyp zu als mit const T&
. Nun, was du wirklich archivieren wolltest:
Das obige Verhalten kann zu undefiniertem Verhalten führen, wenn Sie mit einem Verweis auf nicht-const auf ein ursprünglich konstantes Objekt schreiben (eigentlich ist das bloße Gießen und Lesen in sich kein undefiniertes Verhalten. Aber wenn Sie const , Sie können auch dazu schreiben, was dann das undefinierte Verhalten ergibt)
Es ist ein Fehler, weil der Standard sagt, dass es nicht erlaubt ist. Der Standard zählt die Arten von Konvertierungen auf, die const_cast
ausführen darf, und er lässt alles, was nicht auf der Liste steht, nicht zu. Es ermöglicht Folgendes:
Da deine Typen keine davon sind, sind sie nicht erlaubt.
Auf der hellen Seite brauchen die Beispiele, die Sie angegeben haben, auch nicht const_cast
.
Für den ersten Fehler. const_cast kann nur für Zeiger- oder Referenztypen verwendet werden. "int" ist weder. Dies kann oder kann nicht der C ++ - Standard sein (konnte keine gute Referenz finden). Aber es ist der Fall für bestimmte Implementierungen wie MS C ++ Compiler.
Für den zweiten Fehler. const_cast kann nur verwendet werden, um ein const oder volatile Qualifier zu entfernen und nicht hinzuzufügen.
Referenz: Ссылка
Tags und Links c++ const-cast