我希望有一个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
(一个右值)。我希望我的函数的语法可以很好地处理,而无需重复任何代码。
谢谢!
答案 0 :(得分:2)
forwarding reference应该这样做。它可以与左值和右值一起使用,并保留函数参数的值类别。
转发引用是一种特殊的引用,可以保留 函数自变量的值类别,使其有可能 通过
std::forward
转发。
例如
template <typename T>
void triple_value(T &&n) {
n *= 3;
cout << "Inside function: " << n << endl;
}