Me gustaría saber las reglas especificadas por el estándar del lenguaje C++ para situaciones como:¿Qué dice el estándar de lenguaje C++ sobre cómo maneja static_cast al reducir el tamaño de un entero?
long x = 200;
short y = static_cast<short>(x);
Está y
garantiza que sea 200 o sale el estándar de este hasta la puesta en práctica de decidir? ¿Qué tan bien cumplen los diversos compiladores el estándar?
Comportamiento no indefinido, no especificado. – GManNickG
@GMan: no especificado, pero definido por la implementación. Hay una diferencia sutil: para la implementación definida hay un comportamiento específico que la implementación necesita documentar, que no es necesaria para un comportamiento no especificado. La diferencia entre el comportamiento "no especificado" y "indefinido" es que generalmente hay un conjunto de comportamientos permitidos para los no especificados, mientras que para los indefinidos todo vale (incluido el bloqueo). –
@Michael: es bueno saberlo, gracias. – GManNickG