Referencias inicializar
Las variables de tipo de referencia se deben inicializar con un objeto de tipo del tipo de referencia es derivado, o a un objeto de un tipo que se pueda convertir al tipo del tipo de referencia es derivado.Por ejemplo:
// initializing_references.cpp
int iVar;
long lVar;
int main() {
long& LongRef1 = lVar; // No conversion required.
long& LongRef2 = iVar; // C2440
const long& LongRef3 = iVar; // OK
LongRef1 = 23L; // Change lVar through a reference.
LongRef2 = 11L; // Change iVar through a reference.
LongRef3 = 11L; // C3892
}
La única manera de inicializar una referencia a un objeto temporal es inicializar un objeto temporal constante.Una vez inicializado, puntos de una variable de tipo de referencia siempre al mismo objeto; no puede cambiarse para señalar a otro objeto.
Aunque la sintaxis puede ser igual, la inicialización de las variables de tipo de referencia y asignar a las variables de tipo de referencia son semánticamente diferentes.En el ejemplo anterior, las asignaciones que cambian iVar y lVar es similar a las inicializaciones, pero tienen efectos diferentes.Inicialización especifica el objeto al que los puntos variables de tipo de referencia; las asignaciones de asignación al objeto denominado con referencia.
Dado que pasar un argumento de tipo de referencia a una función y devolver un valor de tipo de referencia de una función son inicializaciones, los argumentos formales a una función se inicializan correctamente, así como las referencias devueltas.
Las variables de tipo de referencia se pueden declarar sin inicializadores sólo lo siguiente:
declaraciones de función (prototipos).Por ejemplo:
int func( int& );
declaraciones de tipos de Función-retorno.Por ejemplo:
int& func( int& );
Declaración de miembro de clase de tipo de referencia.Por ejemplo:
class c { public: int& i; };
Declaración de una variable especificada explícitamente como extern.Por ejemplo:
extern int& iVal;
Al inicializar una variable de tipo de referencia, el compilador usa el gráfico de decisión que se muestra en la figura siguiente para seleccionar entre crear una referencia a un objeto o crear un objeto temporal al que señala la referencia.
Decisión Gráfico para la inicialización de tipos de referencia
Las referenciasvolatile a tipos (declarados comovolatile identificador de typename&) se pueden inicializar convolatile los objetos del mismo tipo o con los objetos que no se han declarado comovolatile.No pueden, sin embargo, inicializar con objetos de const de ese tipo.De igual forma, las referencias a tipos const (declarados como identificador de typename**&** const) se pueden inicializar con objetos const del mismo tipo (o nada que tienen una conversión a ese tipo o con los objetos que no se han declarado como const).No pueden, sin embargo, inicializar con objetos de volatile de ese tipo.
Las referencias que no se califican con const o la palabra clave de volatile sólo se pueden inicializar con objetos declarados como ni const ni volatile.