首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rvalue-对数组的引用:这真的会发生吗?

rvalue-对数组的引用:这真的会发生吗?
EN

Stack Overflow用户
提问于 2012-02-04 06:44:48
回答 1查看 1.2K关注 0票数 5

考虑下面的代码:

代码语言:javascript
复制
#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引用是不被禁止的,但就是不能使用?

编辑:

我刚刚意识到这是可行的:

代码语言:javascript
复制
array&& ret3(){
    return std::move(sample);
}

现在有趣的是理解它的实际价值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-04 07:10:40

那么,您现在将您的数组视为一个r值。您可以将其视为临时对象。您可以使用此信息,但请记住,修改其内容是安全的。例如,您可以编写print_sorted(array&)函数,该函数将打印给定数组的排序内容。要做到这一点,您可以在一些额外的缓冲区中对其进行排序,因为您不想对给定的数据进行混洗。但与print_sorted(array&&) prototype相同的函数可以对数组进行就地排序,因为它知道对象是临时的。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9136520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档