Si hago:¿Dónde está el comportamiento indefinido cuando se usa const_cast <>?
const char* const_str = "Some string";
char* str = const_cast<char*>(const_str); // (1)
str[0] = "P"; // (2)
dónde (en qué línea) es exactamente el comportamiento indefinido?
He estado buscando mucho para esto en SO, pero no he encontrado ninguna respuesta explícita y precisa (o al menos, ninguna que yo pudiera entender).
También relacionado: si uso una biblioteca externa que proporciona este tipo de función:
// The documentation states that str will never be modified, just read.
void read_string(char* str);
¿Está bien escribir algo como:
std::string str = "My string";
read_string(const_cast<char*>(str.c_str()));
Desde que estoy seguro de que read_string()
se nunca intenta escribir en str
?
Gracias.
"Hazlo, pero mantén la nariz". Considere hacerlo una vez en una función de envoltura, para que todos los sitios de llamadas distribuidas puedan al menos evitar esa fealdad. –
Muchas gracias por su respuesta. ¿Tiene alguna fuente para fortalecer su último reclamo? Estoy diseñando un contenedor de C++ en torno a OpenSSL (que desafortunadamente adolece de serias incoherencias en la interfaz) y me gustaría asegurarme de que mi código no sea la causa de un comportamiento indefinido. – ereOn
estándar de C++ La sección 5.2.11 # 7 indica que una * operación de escritura * da como resultado un comportamiento indefinido. Las operaciones de lectura deberían ser seguras. –