Quelle est la référence R-Value qui est sur le point de venir dans la norme suivante c ++?

StackOverflow https://stackoverflow.com/questions/846812

  •  21-08-2019
  •  | 
  •  

Question

Qu'est-ce que la référence R-Value qui est sur le point d'entrer dans le prochain standard C ++?

Était-ce utile?

La solution 3

Voici une très longue article de Stephan T. Lavavej

Autres conseils

Jetez un oeil à Pourquoi C ++ 0x référence rvalue non la valeur par défaut? , ce qui explique assez bien leur utilisation pratique.

Il vous permet de distinguer entre le code qui vous a appelé en passant une référence à une valeur r ou l valeur. Par exemple:

void foo(int &x);

foo(1); // we are calling here with the r-value 1. This would be a compilation error

int x=1;
foo(x); // we are calling here with the l-value x. This is ok

En utilisant une référence valeur r, nous pouvons laisser passer des références à, comme dans temporaires le premier exemple ci-dessus:

void foo(int &&x); // x is an r-value reference

foo(1); // will call the r-value version

int x=1;
foo(x); // will call the l-value version

Ceci est plus intéressant quand nous sommes désireux de passer la valeur de retour d'une fonction qui crée un objet à une autre fonction qui utilise cet objet.

std::vector create_vector(); // creates and returns a new vector

void consume_vector(std::vector &&vec); // consumes the vector

consume_vector(create_vector()); // only the "move constructor" needs to be invoked, if one is defined

Le constructeur de déplacement agit comme le constructeur de copie, mais elle est définie pour prendre une référence de valeur de r plutôt que d'une l-value référence (const). Il est permis d'utiliser la sémantique valeur r pour déplacer les données de la temporaire créée en et les pousser create_vector dans l'argument sans faire une consume_vector copie coûteuse de toutes les données dans le vecteur.

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