具有参考参数的C ++函数适用于左值和右值

时间:2018-09-11 05:56:37

标签: c++ function reference rvalue lvalue

我希望有一个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(一个右值)。我希望我的函数的语法可以很好地处理,而无需重复任何代码。

谢谢!

1 个答案:

答案 0 :(得分:2)

forwarding reference应该这样做。它可以与左值和右值一起使用,并保留函数参数的值类别。

  

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

例如

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