xem xét mã này:rvalue-tham chiếu đến mảng: nó có thực sự xảy ra không?
#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
}
Phiên bản duy nhất mà thực sự dường như biên dịch là ret3()
. Trong thực tế, nếu tôi bỏ qua việc thực hiện và chỉ khai báo nó, nó biên dịch (và không bao giờ liên kết tất nhiên), nhưng thực sự tôi không biết làm thế nào để trả về một tham chiếu rvalue một cách rõ ràng cho một mảng. Nếu điều này không thể xảy ra, thì tôi có thể kết luận rằng tham chiếu rvalue tới mảng không bị cấm nhưng không thể sử dụng được?
EDIT:
Tôi chỉ nhận ra rằng công trình này:
array&& ret3(){
return std::move(sample);
}
nay là niềm vui là sự hiểu biết những gì nó thực sự có giá trị ...
có thể trùng lặp của [Array và Rvalue] (http://stackoverflow.com/questions/3656726/array-and-rvalue) –
Thực ra, bằng cách nào đó tôi đã chú ý đến "tham chiếu" trong câu hỏi. Đây không phải là một bản sao cả. –
Một con trỏ rvalue so với con trỏ lvalue - nó phân rã theo một trong hai cách, vậy lợi ích nhận thức ở đây là gì? – ildjarn