繁体   English   中英

rvalue-reference to array:它真的会发生吗?

[英]rvalue-reference to array: can it actually happen?

考虑以下代码:

#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() 实际上,如果我省略了实现并且只是声明它,它会编译(当然也不会链接),但实际上我不知道如何显式地将rvalue引用返回给数组。 如果这不可能发生,那么我可以得出结论,对数组的rvalue-reference不是禁止的,但是不能使用吗?

编辑:

我才意识到这有效:

array&& ret3(){
    return std::move(sample);
}

现在有趣的是了解它的实际价值......

好吧,您现在将数组视为r值。 您可以将其视为临时对象。 您可以使用此信息,请记住修改其内容是安全的。 例如,您可以编写print_sorted(array&)函数,该函数将打印给定数组的已排序内容。 为此,您可以在一些额外的缓冲区中对其进行排序,因为您不希望随机播放给定的数据。 但是print_sorted(array&&)原型的相同函数可以对数组进行排序,因为它知道对象是临时的。

但是,对没有存储动态数据的普通对象的r值引用似乎不太有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM