我试图返回函数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;
}
也不建议使用此选项。您应该按值返回,而不是重新值引用。