C++ forward
时间: 2024-01-05 20:03:58 浏览: 74
C++中的forward是一个用于完美转发(perfect forwarding)的函数模板。它可以将参数以原始的形式转发给其他函数,保持参数的值类别(value category)和const属性不变。
以下是一个使用forward的示例代码:
```cpp
#include <iostream>
#include <utility>
void foo(int& x) {
std::cout << "lvalue reference: " << x << std::endl;
}
void foo(int&& x) {
std::cout << "rvalue reference: " << x << std::endl;
}
template<typename T>
void bar(T&& x) {
foo(std::forward<T>(x));
}
int main() {
int a = 42;
bar(a); // 传递lvalue
bar(123); // 传递rvalue
return 0;
}
```
输出结果:
```
lvalue reference: 42
rvalue reference: 123
```
在上面的示例中,函数模板`bar`使用了`std::forward`来完美转发参数`x`给函数`foo`。当传递一个左值(lvalue)时,`T`会被推导为左值引用类型,`std::forward<T>(x)`会将`x`作为左值引用传递给`foo`的重载函数,从而保持了原始参数的值类别。当传递一个右值(rvalue)时,`T`会被推导为右值引用类型,`std::forward<T>(x)`会将`x`作为右值引用传递给`foo`的重载函数。
阅读全文