valores tipos sirve retornar retornan realiza qué que para función funciones funcion declarar c++ c++11 language-lawyer rvalue-reference lvalue

c++ - tipos - Enlazar la referencia de valor a lvalue con `void*`



retornar en c++ (2)

Además de la respuesta de @songyuanyao: podría hacer un valor de iptr por ejemplo, mediante static_cast :

int* iptr = nullptr; int*&& irr = static_cast<int *>(iptr);

Mientras trataba de entender cómo funcionan las referencias de valores, terminé con este código:

int* iptr = nullptr; int*&& irr = iptr;

Compilar el código anterior da el siguiente error:

error: la referencia de rvalue al tipo ''int *'' no se puede enlazar a un valor de tipo ''int *''

Entiendo que esto es correcto, pero ¿por qué el siguiente código, donde se vincula usando un void* lugar de int* , se compila sin ningún problema? ¿Será correcto el comportamiento en tiempo de ejecución o debo esperar un comportamiento indefinido?

int* iptr = nullptr; void*&& irr = iptr;


Esto está bien formado.

int* y void* son tipos diferentes; no puede enlazar un int* para hacer referencia a void* directamente. El int* debe convertirse en void* primer lugar, que es un objeto temporal y podría estar vinculado a rvalue-reference. (PS la vida útil del temporal se extiende a la vida útil de la referencia).

Tenga en cuenta que irr no se une a iptr ; por lo que cualquier modificación no tiene nada que ver con iptr .

Esto no es especial para void* , lo mismo sucede con otros tipos, por ejemplo,

char c; int&& r = c; // a temporary int is constructed from c and then bound to r; // its lifetime is extened to the lifetime of r