¿Qué es el R-Valor de referencia que está por venir en el próximo estándar de c++?

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

  •  21-08-2019
  •  | 
  •  

Pregunta

¿Qué es el R-Valor de referencia que está por venir en el próximo estándar de c++?

¿Fue útil?

Solución 3

Aquí hay una muy larga artículo de Stephan T. Lavavej

Otros consejos

Tome un vistazo a ¿Por qué C ++ 0x no referencia rvalue el valor por defecto? , lo que explica su uso práctico bastante bien.

Esto permite distinguir entre el código que ha llamado usted pasa una referencia a un valor-r o un l-valor.Por ejemplo:

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

Mediante el uso de un r-valor de referencia, nos puede permitir pasar en referencias temporales como en el primer ejemplo de arriba:

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

Esto es más interesante cuando se desea transferir el valor de retorno de una función que crea un objeto a otra función que utiliza ese objeto.

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

El movimiento constructor de actos como el constructor de copia, sino que es definido a tomar un r-valor de referencia en lugar de un l-valor (const) de referencia.Es permitido el uso de r-valor de la semántica para mover los datos de la temporal creado en create_vector y empuje en el argumento consume_vector sin hacer un costoso copia de todos los datos en el vector.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top