return cpp 函数中的引用 returns 一个副本
return reference in cpp function returns a copy
我正在尝试 return 函数 test
中参数的引用,但是当我将另一个值分配给 returned 引用时,原始值没有改变:
#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;
}
我怎样才能return这个引用如我所料?
本次测试仅供学习使用。
使 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;
}
这个也不推荐。您应该按值 return 而不是右值引用。
行
int m = test(n);
创建值 test(n)
returns 的副本(在本例中为 n
的副本)。
如果您想要引用 test(n)
的 return 值,您必须使用一个:
int& m = test(n);
使用 auto
进行类型推断时会出现一个常见的警告:即使在这种情况下,您也必须使用
auto& m = test(n);
我正在尝试 return 函数 test
中参数的引用,但是当我将另一个值分配给 returned 引用时,原始值没有改变:
#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;
}
我怎样才能return这个引用如我所料?
本次测试仅供学习使用。
使 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;
}
这个也不推荐。您应该按值 return 而不是右值引用。
行
int m = test(n);
创建值 test(n)
returns 的副本(在本例中为 n
的副本)。
如果您想要引用 test(n)
的 return 值,您必须使用一个:
int& m = test(n);
使用 auto
进行类型推断时会出现一个常见的警告:即使在这种情况下,您也必须使用
auto& m = test(n);