cpp函数中的return引用返回一个副本



我试图返回函数test中参数的引用,但当我为返回的引用分配另一个值时,原始值不会改变:

#include <iostream>
using namespace std;
int& test(int& n) {
return n;
}
int main() {
int n = 1;
int m = test(n);
m = 2;
cout << n << endl; // n = 1
return 0;
}

如何按预期返回此引用?

这个测试只是为了学习。

int m = test(n);

创建test(n)返回的值的副本(在这种情况下是n的副本(。

如果你想引用test(n)的返回值,你必须使用一个:

int& m = test(n);

使用auto进行类型推断时会出现一个常见的警告:即使在这种情况下,也必须使用

auto& m = test(n);

使m成为左值引用:

int& m = test(n);

你也可以绑定到这样的临时:

int test(int& n) { // return by value
return n;
}
int main() {
int n = 1;
int&& m = test(n); // rvalue reference binding to a copy of `n`
m = 2;
std::cout << n << std::endl;
return 0;
}

尽管不建议使用上述代码。

甚至这个:

int&& test( int& n ) // return by rvalue reference
{
return std::move( n ); // cast `n` from lvalue to xvalue
}
int main( )
{
int n = 1;
int&& m = test(n);
m = 2;
std::cout << n << std::endl;
}

也不建议使用此选项。您应该按值返回,而不是重新值引用。

最新更新