Actualmente estoy escribiendo mi disertación de grado e implica también algunas explicaciones de la teoría detrás de C++ 11, que está muy bien ya que C++ es mi lenguaje de programación de elección y el estándar está más o menos disponible de forma gratuita (N3337) para obtener usted perdió en.¿Los objetos temporales son x valores?
Sin embargo, me he golpeado una pared al tratar de explicar la nueva categoría xvalue con precisión y en detalle.
Tengo entendido que un objeto temporal siempre es un valor x pero no puedo encontrar ninguna referencia a esto en el estándar.
Tengo entendido que la categoría de valor de una expresión de una llamada de función a una función que tiene un tipo de retorno no de referencia, es un valor x. El estándar dice que "un xvalor es el resultado de cierto tipo de expresiones que involucran referencias rvalue" que me está molestando. Por ejemplo:
TestClass { ... };
testClass createObject() { return testClass(); }
void someFunction(TestClass& testClass) { ... }
void someFunction(TestClass&& testClass) { ... }
someFunction(createObject());
La voluntad por encima, como se esperaba, llame a la función sobrecargada que toma un valor p-referencia como parámetro. Sin embargo, createObject() no devuelve una referencia rvalue, sino que devuelve un objeto temporal de tipo TestClass. Mi problema es ahora, tengo que explicar las razones detrás de esto. ¿A qué se refiere la expresión "createObject()"? Si se trata de un valor x porque devuelve un objeto temporal, el razonamiento que lo respalda es claro y la referencia rvalue se favorece durante la resolución de sobrecarga. Si no lo hace, ¿cuál es la explicación de este comportamiento con respecto al estándar? ¿Hay alguna lógica de conversión implícita definida en algún lugar que no he encontrado todavía?
Realmente apreciaría si alguien pudiera ayudarme con esto porque incluso después de días de excavar y leer, aún tengo que darme una buena explicación. Muchas gracias por adelantado.
[pregunta relacionada] (http://stackoverflow.com/questions/6609968/) – fredoverflow