¿Qué es el R-Valor de referencia que está por venir en el próximo estándar de c++?
-
21-08-2019 - |
Pregunta
¿Qué es el R-Valor de referencia que está por venir en el próximo estándar de c++?
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.