次のコードを検討してください。
#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
}
実際にコンパイルできるように見える唯一のバージョンはret3()
. 実際、実装を省略して宣言するだけでもコンパイルは行われますが (もちろんリンクは行われません)、配列への右辺値参照を明示的に返す方法がわかりません。これが起こらない場合、配列への右辺値参照は禁止されていないが、使用できないと結論付けることができますか?
編集:
これが機能することに気付きました:
array&& ret3(){
return std::move(sample);
}
今の楽しみは、実際の価値を理解することです...