C++forward
时间: 2023-09-04 11:15:01 浏览: 175
MoveForward.cs
std::forward是C++11中的一个模板函数,它的主要作用是在模板函数或模板类中,将一个参数以"原样"的方式转发给另一个函数。通常情况下,std::forward被用于实现完美转发。
在传递具名变量参数时,std::forward会保留参数的左值或右值属性,让接收函数正确辨别参数类型。如果我们不使用std::forward,那么当传入一个具名变量参数时,接收函数会将其视为左值;当传入一个临时变量(不具名变量)参数时,接收函数会将其视为右值。
std::forward的使用示例可以参考以下代码:
#include <iostream>
#include <utility>
void func(int&& x) {
std::cout << "rvalue reference: " << x << std::endl;
}
void func(int& x) {
std::cout << "lvalue reference: " << x << std::endl;
}
template<typename T>
void wrapper(T&& arg) {
func(std::forward<T>(arg));
}
int main() {
int x = 42;
wrapper(x); // lvalue reference: 42
wrapper(10); // rvalue reference: 1
return 0;
}
在上述代码中,函数wrapper接收一个参数arg,并通过std::forward将arg以原样转发给func函数。根据arg的类型,func会正确判断该参数是左值还是右值,并打印相应的结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [C++编程之 std::forward](https://blog.csdn.net/Awesomewan/article/details/129582548)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文