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.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow