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 小时前
同城系统海外版:一站式多语种O2O系统源码
java·开发语言·git·mysql·uni-app·go·phpstorm
一只乔哇噻4 小时前
java后端工程师+AI大模型开发进修ing(研一版‖day60)
java·开发语言·人工智能·学习·语言模型
LNN20224 小时前
Linuxfb+Qt 输入设备踩坑记:解决 “节点存在却无法读取“ 问题
开发语言·qt
Dolphin_Home4 小时前
笔记:SpringBoot静态类调用Bean的2种方案(小白友好版)
java·spring boot·笔记
暗然而日章4 小时前
C++基础:Stanford CS106L学习笔记 4 容器(关联式容器)
c++·笔记·学习
foxsen_xia5 小时前
go(基础06)——结构体取代类
开发语言·算法·golang
巨人张5 小时前
C++火柴人跑酷
开发语言·c++
_Kayo_5 小时前
Next.js 路由 简单学习笔记
笔记·学习·next.js
ID_180079054735 小时前
基于 Python 的 Cdiscount 商品详情 API 调用与 JSON 核心字段解析(含多规格 SKU 提取)
开发语言·python·json
悟能不能悟6 小时前
Caused by: java.sql.SQLException: ORA-28000: the account is locked怎么处理
java·开发语言