In C++ un oggetto stack allocato può essere dichiarato const
:Un oggetto con allocazione heap può essere const in C++?
const Class object;
dopo che il tentativo di chiamare un metodo non const su tale oggetto è un comportamento indefinito:
const_cast<Class*>(&object)->NonConstMethod(); //UB
Può un mucchio allocate oggetto essere const
con le stesse conseguenze? Voglio dire è possibile che il seguente:
const Class* object = new Class();
const_cast<Class*>(object)->NonConstMethod(); // can this be UB?
è anche un comportamento non definito?
Hmm, dopo aver inviato la mia risposta ho capito che poteva valere anche per l'oggetto assegnato allo stack. Puoi fornire ulteriori informazioni sul perché l'esempio di stack è UB? –
L'esempio di stack è solo il più ovvio. Ad esempio, chiamate qualche funzione e passate un puntatore const a tale oggetto e da qualche parte in profondità nello stack di chiamate viene eseguito un const_cast e viene chiamato un metodo non-const: benvenuto all'UB, molto cattivo per la portabilità. – sharptooth
@sharptooth Questo paragrafo 3.10/15 è in azione? –