Hello,
J'ai du mal à trouver un sens et un intérêt à une déclaration telle que :
Quelqu'un pourrait-il m'éclairer ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part int&& a = 5;
Merci.
Hello,
J'ai du mal à trouver un sens et un intérêt à une déclaration telle que :
Quelqu'un pourrait-il m'éclairer ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part int&& a = 5;
Merci.
Bonjour,
je pense qu'il s'agit d'une histoire de rvalue/lvalue
par exemple :
void func(int toto);
peut etre appelé avec des lvalue et rvalue.
c'est a dire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int n = 1; func(n); // ca marche func(1); //ca marche
void func(int& toto);
peut etre appelé avec des lvalue seulement.
c'est a dire :
void func(int&& toto);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int n = 1; func(n); // ca marche func(1); // marche pas
peut etre appelé avec des rvalue seulement.
c'est a dire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int n = 1; func(n); // marche pas func(1); // ca marche
J'ai bien compris les rvalue dans le cadre des arguments de fonction.
Ce qui m'intrigue, ce sont les autres rvalues nommées, qui ne sont pas des arguments de fonction.
Cela ne sert pas à grand chose et ne force pas le passage de paramètre en rvalue (c'est toujours passé par référence).
Par contre, c'est utile avec des types proxys et du AAA.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 std::vector<int> v1; std::vector<bool> v2; for (int & x : v1){} // ok for (bool & x : v2){} // ne compile pas, *v.begin() est un type proxy (une classe std::vector<bool>::reference) non un bool &.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for (auto && x : v1){} // ok, x est un int& for (auto && x : v2){} // ok, x est un type proxy
Bonjour,
La r-reference est une référence qui s'initialise sur un temporaire (rvalue) ou une variable qui peut être dépecée (xvalue).
Cela est utile en passage de paramètre en particulier pour des optimisations.
L'intérêt dans une variable locale est de bloquer une référence sur un temporaire que l'on va modifier!
La r-référence permet donc d'accéder de manière optimale à un temporaire que l'on peut modifier. Ce cas est rare (proxies) ou souvent idiot, il faut préférer la l-référence constante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Objet fct() {} Objet && x = fct(); // fct a retourné un objet, x permet de l'utiliser plus loin Objet &y = fct(); // erreur, on ne peut pas référencer un temporaire Objet const& z = fct(); // ok, la référence constante est toujours possible Objet u = fct(); // ok, mais une opération de recopie a dû être effectuée ++x.a; ++y.a; // erreur ++u.a; std::cout << x.a << z.a << u.a; //ok
Bonjour,
Mais pourquoi la dernière ligne du code suivant compile-t-elle, alors qu'on affecte à une lvalue une rvalue ?
Est-ce comme à l'intérieur de fonctions ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int j = 3; int&& i = 5; i = j;
i est-il utilisable comme une l-value après son initialisation ?
Partager