繁体   English   中英

如何返回对传递给函数参数的引用的引用?

[英]How to return a reference to the reference passed in function argument?

好的,所以我想做的是将一个引用传递给一个函数,然后返回相同的引用而不进行复制。 我不想使用move,因为那样可以“清空”原始变量的内容。 这就是我想要的伪代码

a;    
b = func(a);    
change(b); // a changes as well

我知道您可以使用指针(auto * b =&a)来完成此操作,但是我想看看是否可以使用函数来完成。 这是我尝试的:

#include <vector>
#include <iostream>
using namespace std;
template<class T>
T& returnRef1(T* t){
    return *t;
}
template<class T>
T& returnRef2(T& t){
    return t;
}

int main(){
    vector<int> vec1 = { 0, 1, 2, 3, 4 };
    auto * p2v = &vec1;
    vector<int>  vec2 = returnRef1(p2v);
    vector<int> vec3 = returnRef2(vec1);
    vec2[0] = 1000;
    vec3[1] = 999;
    cout << "vec1[0]=" << vec1[0] << " vec1[1]=" << vec1[1] << endl;
    cout << "vec2[0]=" << vec2[0] << " vec2[1]=" << vec2[1] << endl;
    cout << "vec3[0]=" << vec3[0] << " vec3[1]=" << vec3[1] << endl;
    cin.get();
}

打印什么

vec1[0]=0 vec1[1]=1
vec2[0]=1000 vec2[1]=1
vec3[0]=0 vec3[1]=999

我想要的是

vec1[0]=1000 vec1[1]=999
vec2[0]=1000 vec2[1]=999
vec3[0]=1000 vec3[1]=999

我知道我的向量在某个时候(在参数和/或返回中)被复制,我不想要那样。

使用vector<int> &vec3 = returnRef2(vec1); 代替vector<int> vec3 = returnRef2(vec1);

暂无
暂无

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

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