具有适用于左值和右值的引用参数的 C++ 函数
Posted
技术标签:
【中文标题】具有适用于左值和右值的引用参数的 C++ 函数【英文标题】:C++ function with reference argument that works for lvalues and rvalues 【发布时间】:2018-09-11 05:56:37 【问题描述】:我想要一个 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】:这是forwarding reference 应该做的。它可以与左值和右值一起使用,并保留函数参数的值类别。
转发引用是一种特殊的引用,它保留 函数参数的值类别,可以 通过
std::forward
转发。
例如
template <typename T>
void triple_value(T &&n)
n *= 3;
cout << "Inside function: " << n << endl;
【讨论】:
请注意,在现实生活场景中,您可能需要在该函数的某处使用std::forward
以上是关于具有适用于左值和右值的引用参数的 C++ 函数的主要内容,如果未能解决你的问题,请参考以下文章
c++中的左值和右值,右值引用到底是啥?关于引用这一节看得很迷糊。