Doble ampersand en C++
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;
}
Haider specializes in technical writing. He has a solid background in computer science that allows him to create engaging, original, and compelling technical tutorials. In his free time, he enjoys adding new skills to his repertoire and watching Netflix.
LinkedIn