So che allontanare lo const
-ness dovrebbe essere fatto con cura, e qualsiasi tentativo di rimuovere const
-ness da un oggetto inizialmente const
seguito dalla modifica dell'oggetto risulta in un comportamento non definito. Cosa succede se vogliamo rimuovere const
-ness in modo che possiamo richiamare una funzione non const che non modifica l'oggetto? So che dovremmo effettivamente contrassegnare tale funzione const
, ma supponiamo che io stia usando un codice "cattivo" che non ha la versione const
disponibile.È sicuro rimuovere const tramite const_cast e richiamare una funzione non const che non modifica l'oggetto risultante?
Quindi, per riassumere, il codice è "sicuro"? La mia ipotesi è che finché non si finisce di modificare l'oggetto, si sta bene, ma non sono sicuro al 100%.
#include <iostream>
struct Foo
{
void f() // doesn't modify the instance, although is not marked const
{
std::cout << "Foo::f()" << std::endl;
}
};
int main()
{
const Foo foo;
const_cast<Foo&>(foo).f(); // is this safe?
}
Indipendentemente dal fatto che sia consentito dallo standard, come già risposto, direi che non è né sicuro, né a posto. – hvd
@hvd Perché un'operazione di sola lettura non è sicura? – Barry
@Barry Non è questo il punto. Quella funzione membro può essere modificata in seguito, per invocare accidentalmente UB. – Columbo