HOWTO · C++

Double esperluette en C++

Ce tutoriel présente ce que signifie une double esperluette en C++.

Sur cette page

Ce guide traitera du signe double esperluette en C++. C’est en fait dans les concepts de C++11.

Vous avez peut-être vu une double esperluette (&&) lors de la déclaration de variables. Pour comprendre tous les aspects de ce concept, nous devons comprendre certaines des bases de C++.

Double esperluette en C++

Pour comprendre l’esperluette double (&&), nous devons connaître lvalues et rvalues en C++. Nous allons comprendre ces termes dans les sous-sections suivantes.

La lvalue en C++

La lvalue est considérée comme un objet ou une variable pouvant occuper un espace identifiable dans la mémoire principale ou RAM. Par exemple, jetez un oeil au code suivant.

int number = 10;

number est considéré comme une lvalue dans le code ci-dessus. Nous obtenons son emplacement/adresse en en faisant un pointeur.

// 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

Le rvalue en C++

La rvalue est un objet ou une variable qui n’a pas d’espace identifiable en mémoire. Il est également considéré comme une valeur temporaire.

Jetez un oeil au code suivant.

int number = 10;

number est une lvalue dans le code ci-dessus, mais 10 est une rvalue. Si nous essayons d’obtenir l’adresse du chiffre 10, nous obtiendrons une erreur.

// int *ptr_10 = &10;
//(error) expression must be an lvalue

En C++11, le signe double esperluette fait référence à la rvalue. Considérons maintenant deux méthodes.

Un avec une esperluette simple et un autre avec une double esperluette.

Si vous essayez de passer la lvalue à la fonction, vous obtiendrez une erreur. Donc, fondamentalement, le but principal de la double esperluette est de faire référence aux 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;
}