2010-06-09 7 views
5

Me tomó bastante tiempo entender la diferencia entre un valor en r y un objeto temporal. Pero ahora los proyectos finales comité de estados en la página 75:rvalues ​​y objetos temporales en el FCD

Un rvalue [...] es un xValue, un objeto temporal o subobjeto del mismo, o un valor que no está asociado con una objeto.

No puedo creer lo que veo. Esto debe ser un error, ¿verdad?


Para aclarar, aquí es cómo entiendo los términos:

#include <string> 

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

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

En este programa, hay dos expresiones que denotan el mismo objeto temporal: la prvalue std::string("hello") y el valor izquierdo str. Las expresiones no son objetos, pero su evaluación puede ser una. Específicamente, la evaluación de un prvalue produce un objeto temporal, pero un prvalue NO ES un objeto temporal. ¿Alguien está de acuerdo conmigo o me he vuelto loco? :)

+2

Puede plantearle a las personas de estándares directamente al publicar una pregunta en comp.lang.C++. Std –

+0

@Noah: Lo hice. Veamos qué sucede :) – fredoverflow

+0

[link to comp.std.C++ thread] (http://groups.google.de/group/comp.std.c++/browse_thread/thread/5cdae718218a462c) – fredoverflow

Respuesta

2

Sí, estoy de acuerdo contigo. Esto debería ser corregido en mi opinión, y varias personas que respeto profundamente han levantado exactamente la misma pregunta sobre esto.

0

Esto no es tan complicado como parece. Me refiero al estándar ahora finalizado ISO/IEC 14882-2011. Página 78 dice:

Un xValue (un “expira” valor) también se refiere a un objeto, por lo general cerca el final de su vida útil (de modo que sus recursos se pueden mover, por ejemplo). Un xvalor es el resultado de ciertos tipos de expresiones que implican referencias rvalue (8.3.2).

La negrita anterior ha sido agregada por mí. El estándar más dice:

Un rvalue (la llamada, históricamente, porque rvalues ​​podrían aparecer en el lado derecho de una expresión de asignación) es un xValue, un objeto temporal (12.2) o subobjeto del mismo, o un valor que no es asociado con un objeto.

Así que solo obtiene un xvalor cuando está jugando con 'ciertos tipos de expresiones que implican referencias de valores'. De lo contrario, tus objetos temporales son solo eso: objetos temporales.

+0

Se ha eliminado la pregunta incrustada. Hazlo como otra pregunta. – quantum

Cuestiones relacionadas