El estándar es bastante claro en sizeof
(C++ 11, 5.3.3/4):
Cuando se aplica a una referencia o un tipo de referencia , el resultado es el tamaño del tipo al que se hace referencia.
Así que si realmente está tomando sizeof(double&)
, el compilador le está diciendo que es sizeof(double)
4.
Actualización: Por lo tanto, lo que realmente está haciendo es aplicar sizeof
a un tipo de clase. En ese caso,
cuando se aplica a una clase, el resultado es el número de bytes en un objeto de esa clase [...]
por lo que sabemos que la presencia de la referencia dentro de A
hace que ocupe 4 bytes. Esto se debe a que, aunque el estándar no ordena cómo se implementarán las referencias, el compilador todavía tiene que implementarlas de alguna manera. Esto de alguna manera puede ser muy diferente dependiendo del contexto, pero para un miembro de referencia de un tipo de clase, el único enfoque que tiene sentido es el de esconderse en un double*
detrás de su espalda y llamarlo double&
en su cara.
Por lo tanto, si su arquitectura es de 32 bits (en la que los punteros tienen una longitud de 4 bytes) eso explicaría el resultado.
Solo tenga en cuenta que el concepto de una referencia no está vinculado a ninguna implementación específica. El estándar permite al compilador implementar referencias de la manera que quiera.
No se puede obtener el tamaño de una referencia, porque una referencia no es un objeto. Por favor muéstranos con qué código estás probando. –
¿por qué los votos negativos? – AlexDan
Porque su pregunta no tiene sentido. Como dice @ R.MartinhoFernandes, no se puede obtener el tamaño de una referencia. Entonces, a menos que publiques un código que muestre lo que realmente estás * haciendo *, no tenemos ni idea de qué preguntas ni cómo responderlo – jalf