en C++ un objeto pila-asignado puede ser declarado const
:¿Puede un objeto asignado en el montón const en C++?
const Class object;
después de que tratando de llamar a un método no const en tal objeto es un comportamiento indefinido:
const_cast<Class*>(&object)->NonConstMethod(); //UB
Puede un heap-asignados objeto sea const
con las mismas consecuencias? Quiero decir, ¿es posible que lo siguiente:
const Class* object = new Class();
const_cast<Class*>(object)->NonConstMethod(); // can this be UB?
también es comportamiento indefinido?
Hmm, después de publicar mi respuesta me di cuenta de que podría aplicarse también a su objeto asignado a la pila. ¿Puedes proporcionar más información sobre por qué el ejemplo de pila es UB? –
El ejemplo de la pila es simplemente el más obvio. Por ejemplo, llamas a alguna función y pasas un puntero const a tal objeto y en algún lugar muy profundo de la pila de llamadas se hace un const_cast y se invoca un método no constreñido: bienvenido el UB, muy malo para la portabilidad. – sharptooth
@sharptooth ¿Este párrafo 3.10/15 está en acción? –