Skip to content

Latest commit

 

History

History
31 lines (22 loc) · 947 Bytes

什么是完美转发?.md

File metadata and controls

31 lines (22 loc) · 947 Bytes

完美转发是一个与模板和函数重载相关的概念,它允许一个函数将其接收到的参数以原始的值类别(左值或右值)传递给另一个函数。这意味着如果你传递了一个左值给包装函数,那么被调用的函数也会接收到一个左值;如果传递的是一个右值,则同样地,被调用的函数会接收到一个右值。

#include <utility>

// 这个函数负责“转发”它的参数到另一个函数
template<typename T>
void wrapper(T&& arg) {
    // 使用 std::forward 来确保 arg 的值类别得以保持不变
    target(std::forward<T>(arg));
}

// 一个可能接受左值或右值参数的目标函数
void target(int& x) {
    // 处理左值
}

void target(int&& x) {
    // 处理右值
}

int main() {
    int lv = 5;     // 左值
    wrapper(lv);    // 应该调用 void target(int& x)
    wrapper(10);    // 应该调用 void target(int&& x)
}