Question

Il m'a fallu pas mal de temps pour comprendre la différence entre une valeur et un objet temporaire.Mais maintenant, le projet final du comité indique à la page 75 :

Un rvaleur [...] est une valeur x, un objet temporaire ou un sous-objet de celui-ci, ou une valeur qui n'est pas associée à un objet.

Je n'en crois pas mes yeux.Cela doit être une erreur, non ?


Pour clarifier, voici comment je comprends les termes :

#include <string>

void foo(std::string&& str)
{
    std::cout << str << std::endl;
}

int main()
{
    foo(std::string("hello"));
}

Dans ce programme, il y a deux expressions qui désigne la même chose objet temporaire:la valeur std::string("hello") et la valeur str.Les expressions ne sont pas des objets, mais leur évaluation peut en donner un.Plus précisément, l'évaluation d'une prvalue produit un objet temporaire, mais une prvalue N'EST PAS un objet temporaire.Est-ce que quelqu'un est d'accord avec moi ou je suis devenu fou ?:)

Était-ce utile?

La solution

Oui, je suis d'accord avec vous. Cela devrait être fixé à mon avis, et plusieurs personnes que je paye respecte profondément avoir augmenté la même question à ce sujet.

Autres conseils

Ce n’est pas aussi compliqué qu’il y paraît.Je fais référence à la norme ISO/IEC 14882-2011, désormais finalisée.La page 78 dit :

Un xvalue (une valeur «expirante») fait également référence à un objet, généralement vers la fin de sa durée de vie (afin que ses ressources puissent être déplacées, par exemple). Un xvalue est le résultat de certains types d'expressions impliquant des références (8.3.2).

Le gras ci-dessus a été ajouté par moi.La norme dit en outre :

Une réalité (ainsi appelée, historiquement, car les RValues ​​peuvent apparaître sur le côté droit d'une expression d'attribution) est un xvalue, un objet temporaire (12.2) ou un sous-objet de celui-ci, ou une valeur qui n'est pas associée à un objet.

Ainsi, vous n'obtenez une valeur x que lorsque vous jouez avec « certains types d'expressions impliquant des références rvalue ».Sinon, vos objets temporaires ne sont que cela : des objets temporaires.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top