2010-06-26 11 views
6

¿Es legal el siguiente código?¿Las referencias rvalue permiten conversiones implícitas?

std::string&& x = "hello world"; 

g ++ 4.5.0 compila este código sin ningún problema.

+0

¿Conoces algún caso de uso interesante para esto? Pensé que la única razón para los valores nominales era para enlazar a sobrecargas especiales. – Inverse

+0

@Inverso: Bueno, eso es exactamente por lo que realmente estaba preguntando, pasando argumentos a las funciones. Es solo que, con el propósito de hacer la pregunta, no quería escribir y llamar a una función;) Técnicamente hablando, no existe tal cosa como un valor de nombre (excepto las palabras clave 'this' y' nullptr'). Probablemente se refirió a una referencia * de rvalue * - como 'x' en este ejemplo, que es un valor l, no un valor r. – fredoverflow

Respuesta

5

Esto se discute en usenet actualmente. Ver Rvalue reference example in 8.5/3 correct or wrong?.

No es legal.

+0

@Jerry que es una sub-columna de "la referencia será una referencia rvalue y la expresión del inicializador será un valor r", que el literal de cadena no satisface. –

+0

@Jerry Los literales de cadena son lvalues, como en C. Vea 5.1.1/1. A diferencia de las simples, se refieren a objetos y necesitan convertir a punteros. Por lo tanto, de hecho tienen la propiedad de ser un "valor de localización de almacenamiento" (que lvalues ​​que se refieren a objetos). –

+0

@Johannes: Sí, no encontré 5.1.1/1, lo que claramente lo dice. Gracias. Eso claramente hace que la interpretación sea imposible. –

Cuestiones relacionadas