Double esperluette en C++
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;
}
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