Esta mañana estaba trabajando en un código de plantilla donde usé un BOOST_STATIC_ASSERT
para asegurarme de que no estaba creando una referencia al tipo incorrecto, ya que pensé que podría ser un mensaje de error más claro. Sin embargo, cuando he intentado quitar la aserción estática para echar un vistazo en el error del compilador alternativa que se sorprendió al descubrir que gcc ni siquiera se quejan cuando intenta hacer una const doble & refiriéndose a un int:¿Cómo maneja C++ un const double y eso se refiere a un int?
#include <iostream>
int main()
{
int x = 5;
const double& y = x;
std::cout << y << std::endl;
return 0;
}
Compila, y ni siquiera avisa:
$ g++ ~/stuff/badRef.cpp -Wall -Wextra -pedantic
$ a.out
5
¿Qué está pasando aquí? ¿Es este comportamiento indefinido? Si es así, ¿por qué no se queja gcc? En mi máquina, int es 4 bytes y el doble es 8. Esto significa que al imprimir un doble &, debe interpretar 8 bytes en esa dirección como un doble e imprimirlo, aunque en realidad hay un int 4 bytes en esa ubicación.
Muy confundido. ¡Ayuda!
¿Qué versión de GCC? –
Es la versión 4.3.3. – voltrevo
¿Qué sucede cuando agrega 'x = 42;' después de 'const double & y = x;'? Puede ser curioso/inesperado a primera vista. – moala