¿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.
¿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.
Esto se discute en usenet actualmente. Ver Rvalue reference example in 8.5/3 correct or wrong?.
No es legal.
@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. –
@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). –
@Johannes: Sí, no encontré 5.1.1/1, lo que claramente lo dice. Gracias. Eso claramente hace que la interpretación sea imposible. –
¿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
@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