在C++中,std::forward是一个用于完美转发的模板函数,可以将参数按照原始类型(左值或右值)转发给另一个函数,避免额外的拷贝构造和移动构造。
以下是一个示例代码,演示如何使用std::forward避免拷贝:
#include <iostream>
#include <utility>
void process(int& i) {
std::cout << "Lvalue reference: " << i << std::endl;
}
void process(int&& i) {
std::cout << "Rvalue reference: " << i << std::endl;
}
template <typename T>
void forward_test(T&& i) {
process(std::forward<T>(i));
}
int main() {
int a = 10;
forward_test(a); // 调用process(int&)
forward_test(20); // 调用process(int&&)
return 0;
}
在上面的示例中,forward_test函数使用了std::forward来将参数i按照原始类型转发给process函数。当传递一个左值a时,T被推导为int&,std::forward会将i以左值引用的形式进行转发,避免了额外的拷贝构造;当传递一个右值20时,T被推导为int&&,std::forward会将i以右值引用的形式进行转发,避免了额外的移动构造。
通过使用std::forward可以有效地避免不必要的拷贝构造和移动构造,提高程序的性能。