Considerate questo codice:rvalue-reference to array: può effettivamente accadere?
#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
}
L'unica versione che sembra in realtà per la compilazione è ret3()
. Infatti, se tralascio l'implementazione e la dichiaro, compila (e non collega mai, ovviamente), ma in realtà non so come restituire esplicitamente un riferimento di valore a un array. Se questo non può accadere, allora posso concludere che il riferimento al valore di riferimento agli array non è proibito ma non può essere usato?
EDIT:
Ho appena realizzato che questo funziona:
array&& ret3(){
return std::move(sample);
}
ora il divertimento è capire che cosa è in realtà vale la pena ...
possibile duplicato di [Array e Rvalue] (http://stackoverflow.com/questions/3656726/array-and-rvalue) –
In realtà, in qualche modo ho sorvolato il "riferimento" nella domanda. Questo non è affatto un duplicato. –
Un puntatore rvalore rispetto a un puntatore lvalue - decadono in entrambi i modi, quindi qual è il vantaggio percepito qui? – ildjarn