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;
}