Doble ampersand en C++

Haider Ali 12 octubre 2023
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;
}
Autor: Haider Ali
Haider Ali avatar Haider Ali avatar

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

Artículo relacionado - C++ Reference