Функция C ++ со ссылочным аргументом, которая работает для lvalues ​​и rvalues - PullRequest
0 голосов
/ 11 сентября 2018

Я хотел бы иметь функцию C ++, которая принимает аргумент, который является ссылкой, и работает как для lvalues, так и для rvalues ​​с с одинаковым синтаксисом .

. Возьмем этот пример:

#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 (значение l) и 3 (значение).Мне нужен синтаксис для моей функции, которая прекрасно справляется с обоими, без необходимости повторять какой-либо код.

Спасибо!

1 Ответ

0 голосов
/ 11 сентября 2018

Это то, что ссылка для пересылки должна делать. Он может использоваться как с lvalues, так и с rvalues, и сохраняет категорию значений аргумента функции.

Пересылка ссылок - это особый вид ссылок, которые сохраняют категория значения аргумента функции, позволяющая переслать его с помощью std::forward.

1012 *, например *

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