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