C++带有适用于左值和右值的引用参数的函数
C++ function with reference argument that works for lvalues and rvalues
我想要一个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;
}
相关文章:
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 具有常量引用参数的函数模板专用化
- C++:常量引用参数
- 字符串引用参数的效率C++
- 通过非常量引用参数修改常量引用参数
- 如何将指针变量作为引用参数传递?
- C++初始化 std::function 时如何将占位符绑定到引用/引用参数?
- 移动类的成员作为常量引用参数传递
- C++带有适用于左值和右值的引用参数的函数
- constexpr 函数的常量引用参数:gcc/msvc vs clang/icc
- 如何使用类型特征将函数的通用引用参数限制为 r 值引用?
- 委托构造函数和引用参数
- 对 const 引用参数使用默认值会导致崩溃
- 为什么我们不允许将纯引用参数传递给 std::thread,但允许传递原始指针?
- 为什么我需要将默认引用参数定义为 const 以便为其分配一个左值?
- 将非左值作为常量引用参数传递.临时是在本地作用域还是在调用方作用域中创建的?
- 如何强制函数仅接受左值引用参数
- 模板引用参数推断失败C++
- 非类型引用参数可以在运行时修改,这是否意味着模板可以在运行时实例化?
- 将unique_ptr作为引用参数或常量传递unique_ptr引用