C++带有适用于左值和右值的引用参数的函数

C++ function with reference argument that works for lvalues and rvalues

本文关键字:引用 参数 函数 适用于 C++      更新时间:2023-10-16

我想要一个C++函数,它接受一个参数,这是一个引用,并且使用相同的语法适用于左值和右值。

举个例子:

#include <iostream>
using namespace std;
void triple_lvalue(int &n) {
n *= 3;
cout << "Inside function: " << n << endl;
}
void triple_rvalue(int &&n) {
n *= 3;
cout << "Inside function: " << n << endl;
}
int main() {
int n = 3;
triple_lvalue(n);
cout << "Outside function: " << n << endl;
triple_rvalue(5);
}

输出:

Inside function: 9
Outside function: 9
Inside function: 15

此代码有效。但是我的情况需要两个不同的函数,第一个是我传递n(左值(和3(右值(。我想要我的函数的语法,可以很好地处理两者,而无需重复任何代码。

谢谢!

这就是转发引用应该做的事情。它可以与左值和右值一起使用,并保留函数参数的值类别。

转发引用是一种特殊的引用,可以保留 函数参数的值类别,使其能够 通过std::forward转发它。

例如

template <typename T>
void triple_value(T &&n) {
n *= 3;
cout << "Inside function: " << n << endl;
}