consideran este código:rvalue-reference to array: ¿puede suceder realmente?
#include <iostream>
using namespace std;
typedef int array[12];
array sample;
array ret1(){ //won't compile
return sample;
}
array& ret2(){
return sample;
}
array&& ret3(){
return sample; //won't compile
}
void eat(array&& v){
cout<<"got it!"<<endl;
}
int main(){
eat(ret1());
eat(ret2()); //won't compile
eat(ret3()); //compiles, but I don't really know how to write a function that returns a rvalue-reference to an array
}
La única versión que en realidad parece que compilar es ret3()
. De hecho, si omito la implementación y solo la declaro, se compila (y nunca se vincula, por supuesto), pero realmente no sé cómo devolver explícitamente una referencia rvalue a una matriz. Si esto no puede suceder, ¿puedo concluir que la referencia rvalue a las matrices no está prohibida, pero simplemente no se puede usar?
EDIT:
me he dado cuenta de que esto funciona:
array&& ret3(){
return std::move(sample);
}
ahora la diversión es la comprensión de lo que es realmente vale la pena ...
posible duplicado de [Array y Rvalue] (http://stackoverflow.com/questions/3656726/array-and-rvalue) –
En realidad, de alguna manera pasé por alto la "referencia" en la pregunta. Esto no es un duplicado en absoluto. –
Un puntero rvalue contra un puntero lvalue: decae de cualquier manera, entonces, ¿cuál es el beneficio percibido aquí? – ildjarn