VC++ 2010 Problem ignoriert:const_cast mit Bool: if Bedingung
const bool bNew = true;
const_cast<bool&>(bNew) = false;
if(bNew)//bNew is false here, but
{
int i = 0;//this line will be executed
}
Warum?
Vielen Dank.
VC++ 2010 Problem ignoriert:const_cast mit Bool: if Bedingung
const bool bNew = true;
const_cast<bool&>(bNew) = false;
if(bNew)//bNew is false here, but
{
int i = 0;//this line will be executed
}
Warum?
Vielen Dank.
Aus dem Bereich 7.1.5.1/4 des C++ 03-Standard:
Abgesehen davon, dass jeder Teilnehmer, erklärt
mutable
(7.1.1) modifiziert werden kann, jeder Versuch, einconst
Objekt während seiner ändern Lebensdauer (3.8) führt zu undefiniertem Verhalten.
Sie erklärt bNew
ein const
Objekt zu sein, dann Sie den Typ System durch explizites Casting es untergraben entfernt, ihn zu ändern. Sie haben daher undefiniertes Verhalten aufgerufen, was bedeutet, dass irgendetwas passieren kann.
Also, was ist der Zweck von const_cast? –
Wenn Sie 100% sicher sind, dass das Objekt nicht erstellt wurde, const. Vermeide es. – Ven
@AcaMiln: Hauptsächlich mit schlechten oder alten APIs, die selbst nicht korrekt sind. Angenommen, Sie müssen eine Funktion aufrufen, die ein 'MyClass & obj'-Argument akzeptiert, obwohl Sie wissen, dass diese Funktion' obj' nicht ändert; es fehlt nur das "const" in der Referenz. Jetzt haben Sie ein 'MyClass const arg', das Sie an diese Funktion übergeben müssen. Hier wäre ein 'const_cast' angebracht. –
Können Sie ein Tag für VC++ 2010 hinzufügen? –
@ C-Otto: fertig, danke. – bernie
Es klingt, als hätte der Compiler die Auswertung von 'bNew' auf' true' optimiert, unabhängig davon, was Sie in der zweiten Zeile tun. –