C++笔记之std::forward

C++笔记之std::forward

文章目录

std::forward的作用是在C++中帮助实现完美转发(perfect forwarding),它将传递给它的参数以原始类型和引用的方式传递给下一个函数,保持参数的值类别(lvalue或rvalue)不变。这有助于确保传递给下一个函数的参数类型与调用者传递的参数类型一致,从而实现更灵活的函数参数传递。

例一

代码

cpp 复制代码
#include <utility>

template <typename T>
void process(T&& arg) {
    // 使用 std::forward 将参数 arg 完美转发给另一个函数
    // 这里的 std::forward 会保留 arg 的原始类型和引用性质
    another_function(std::forward<T>(arg));
}

void another_function(int& x) {
    // 处理左值引用
}

void another_function(int&& x) {
    // 处理右值引用
}

int main() {
    int value = 42;
    process(value);      // 调用左值版本的 another_function
    process(123);        // 调用右值版本的 another_function
}

例二

代码

cpp 复制代码
#include <iostream>
#include <utility>

// 使用完美转发的函数模板
template <typename T>
void forwarder(T&& arg) {
    // 调用另一个函数,并将参数完美转发
    some_function(std::forward<T>(arg));
}

// 示例函数,可以接受各种类型的参数
void some_function(int& i) {
    std::cout << "Lvalue reference: " << i << std::endl;
}

void some_function(int&& i) {
    std::cout << "Rvalue reference: " << i << std::endl;
}

int main() {
    int x = 42;

    // 调用 forwarder 时,完美转发参数 x
    forwarder(x); // 输出 "Lvalue reference: 42"

    // 可以通过将临时对象传递给 forwarder 来完美转发右值
    forwarder(123); // 输出 "Rvalue reference: 123"

    return 0;
}
相关推荐
黄贵根4 小时前
JavaScript实现教培行业意向登记系统
开发语言·javascript·ecmascript
2401_868534787 小时前
RTOS之RT-Thread & Linux:线程/进程管理与调度核心差异分析
c++·python
zzzll11117 小时前
Claude Code离线安装方案揭秘
开发语言·php
wling03018 小时前
vasp虚频计算-python脚本
开发语言·windows·python·vasp计算
一米阳光86618 小时前
软考(中级)软件设计师核心笔记(6)系统开发基础——需求分析、系统设计
笔记·职场发展·需求分析·软考·软件设计师·中级职称
郝学胜-神的一滴8 小时前
Qt 高级编程 040:按钮悬浮弹出滑块弹窗的完整攻略
开发语言·c++·qt·软件工程·用户界面
xrandzj9 小时前
Python面向对象编程入门:类、实例、初始化与封装实践
开发语言·python
DLYSB_10 小时前
API 网关流量洪峰与突发 CC 攻击:我用 Go 写了个“现场物理防御哨兵”,把故障响应压缩到秒级
开发语言·后端·golang·报警灯
雨田言炎11 小时前
四、关于Qt项目需要知道的
开发语言·笔记·qt
程序喵大人12 小时前
【C++进阶】STL算法与函数对象 - 02 sort为什么需要随机访问迭代器
开发语言·c++·算法