C++
Referencias
Buscar..
Definiendo una referencia
Las referencias se comportan de manera similar, pero no del todo como punteros const. Una referencia se define mediante el sufijo de un signo &
a un nombre de tipo.
int i = 10;
int &refi = i;
Aquí, refi
es una referencia vinculada a i
.
Referencias resume la semántica de los punteros, actuando como un alias para el objeto subyacente:
refi = 20; // i = 20;
También puede definir múltiples referencias en una sola definición:
int i = 10, j = 20;
int &refi = i, &refj = j;
// Common pitfall :
// int& refi = i, k = j;
// refi will be of type int&.
// though, k will be of type int, not int&!
Las referencias deben inicializarse correctamente en el momento de la definición y no pueden modificarse posteriormente. La siguiente pieza de códigos provoca un error de compilación:
int &i; // error: declaration of reference variable 'i' requires an initializer
Tampoco puede enlazar directamente una referencia a nullptr
, a diferencia de los punteros:
int *const ptri = nullptr;
int &refi = nullptr; // error: non-const lvalue reference to type 'int' cannot bind to a temporary of type 'nullptr_t'
Las referencias de C ++ son alias de variables existentes
Una referencia en C ++ es solo un Alias
u otro nombre de una variable. Al igual que la mayoría de nosotros, podemos referirnos usando nuestro nombre de pasaporte y nuestro nombre de usuario.
Las referencias no existen literalmente y no ocupan ningún recuerdo. Si imprimimos la dirección de la variable de referencia, se imprimirá la misma dirección que la de la variable a la que hace referencia.
int main() {
int i = 10;
int &j = i;
cout<<&i<<endl;
cout<<&b<<endl;
return 0;
}
En el ejemplo anterior, ambos cout
imprimirán la misma dirección. La situación será la misma si tomamos una variable como referencia en una función.
void func (int &fParam ) {
cout<<"Address inside function => "<<fParam<<endl;
}
int main() {
int i = 10;
cout<<"Address inside Main => "<<&i<<endl;
func(i);
return 0;
}
También en este ejemplo, ambos cout
imprimirán la misma dirección.
Como sabemos ahora que las C++ References
son solo un alias, y para que se cree un alias, necesitamos tener algo a lo que el Alias pueda referirse.
Esa es la razón precisa por la que la declaración como esta arrojará un error de compilación
int &i;
Porque, el alias no se refiere a nada.