HOWTO · C++
Doble ampersand en C++
Este tutorial presenta lo que significa doble ampersand en C++.
En esta página
Esta guía discutirá el signo de doble ampersand en C++. En realidad, está en los conceptos de C++11.
Es posible que haya visto el doble ampersand (&&) al declarar variables. Para entender cada aspecto de este concepto, necesitamos entender algunos de los conceptos básicos de C++.
Doble ampersand en C++
Para entender el doble ampersand (&&), necesitamos saber lvalues y rvalues en C++. Entendamos estos términos en las siguientes subsecciones.
el lvalue en C++
El lvalue se considera un objeto o variable que puede ocupar un espacio identificable en la memoria principal o RAM. Por ejemplo, eche un vistazo al siguiente código.
int number = 10;
number se considera un lvalue en el código anterior. Obtenemos su ubicación/dirección convirtiéndolo en un puntero.
// this is pointer to varible
int *ptr_Number = &number;
// here we'll get the address of variable in memory;
cout << ptr_Number << endl;
// object example
el rvalue en C++
El rvalue es un objeto o variable que no tiene ningún espacio identificable en la memoria. También se considera un valor temporal.
Echa un vistazo al siguiente código.
int number = 10;
number es un lvalue en el código anterior, pero 10 es un rvalue. Si tratamos de obtener la dirección del dígito 10, obtendremos un error.
// int *ptr_10 = &10;
//(error) expression must be an lvalue
En C++11, el signo de doble ampersand se refiere al rvalue. Ahora, consideremos dos métodos.
Uno con un signo de ampersand simple y otro con el ampersand doble.
Si intenta pasar el lvalue a la función, obtendrá un error. Entonces, básicamente, el propósito principal del doble ampersand es referirse a rvalues.
// single ampersand sign is used to refer lvalue
int add(int &a, int &b) { return a + b; }
// double ampersand sign is used to refer rvalue
int add_(int &&a, int &&b) { return a + b; }
int main() {
// here we pass lvalue to the function
int num1 = 10;
int num2 = 30;
int sum = add(num1, num2);
cout << sum << endl;
// it will give the error if we pass the rvalues to that function
// int sum_1= add(10,30);
//(error) initial value of reference to non-const must be an lvalue
// c++11 provides the facility of passing rvalues by using double ampersand
// sign
int sum_1 = add_(10, 30);
cout << endl;
}