Me preguntaba si el siguiente es un comportamiento indefinido¿Es este comportamiento indefinido const_cast?
// Case 1:
int *p = 0;
int const *q = *const_cast<int const* const*>(&p);
// Case 2: (I think this is the same)
int *p = 0;
int const *const *pp = &p;
int const *q = *pp;
¿Se trata de un comportamiento indefinido mediante la lectura de un int*
como si se tratara de un int const*
? Creo que es un comportamiento indefinido, pero previamente pensé que solo agregar const
en general es seguro, entonces no estoy seguro.
¡Nos lo está pidiendo! :-) Como cuestión de interés, ¿tiene un caso de uso del mundo real para esto? Y como tú, siempre he supuesto que agregar constness no puede romper nada. –
@unapersson ah ¡Acabo de leer la última especificación de C++ 0x y resulta que tiene la respuesta! Estaba discutiendo este problema con mi colega hoy, quien agregó "const" a una "T" para "T *" como un adaptador interator y se encontró con un problema que suplicaba por esta conversión implícita. –
Creo que esto está totalmente bien y no veo nada peligroso aquí. –