【C++11】完美转发的使用以及万能引用

news2024/12/28 19:05:35

🌏博客主页: 主页
🔖系列专栏: C++
❤️感谢大家点赞👍收藏⭐评论✍️
😍期待与大家一起进步!


文章目录

  • 一、模板中的&& 万能引用
    • 右值引用变量的类型会被编译器识别为左值类型
  • 二、完美转发
    • 1.使用场景


一、模板中的&& 万能引用

  1. 模板中的&&不代表右值引用,而是万能引用,其既能接收左值又能接收右值。
    2.模板的万能引用只是提供了能够接收同时接收左值引用和右值引用的能力,
void Fun(int& x) { cout << "左值引用" << endl; }
void Fun(const int& x) { cout << "const 左值引用" << endl; }

void Fun(int&& x) { cout << "右值引用" << endl; }
void Fun(const int&& x) { cout << "const 右值引用" << endl; }

// 万能引用:既可以接收左值,又可以接收右值
// 实参左值,他就是左值引用(引用折叠)
// 实参右值,他就是右值引用
template<typename T>
void PerfectForward(T&& t)
{
	// 完美转发,t是左值引用,保持左值属性
	// 完美转发,t是右值引用,保持右值属性
	Fun((t));
}

int main()
{
	PerfectForward(10);           // 右值

	int a;
	PerfectForward(a);            // 左值
	PerfectForward(std::move(a)); // 右值

	const int b = 8;
	PerfectForward(b);		      // const 左值
	PerfectForward(std::move(b)); // const 右值

	return 0;
}

但运行结果却不像我们想的那样
在这里插入图片描述

右值引用变量的类型会被编译器识别为左值类型

如何证明呢?
证明结果如下
在这里插入图片描述

在这里插入图片描述
所以我们需要用完美转发来实现属性的转变

二、完美转发

std::forward 完美转发在传参的过程中保留对象原生类型属性
在这里插入图片描述
这里模板里面的T要是为实例化的,我们T的类型是根据你传入的实参t的类型来推导的

1.使用场景

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1050983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ModuleNotFoundError: No module named ‘taming‘

参考&#xff1a;https://stackoverflow.com/questions/69983020/modulenotfounderror-no-module-named-taming 【问题】 缺少taming模块&#xff0c;错误提示&#xff1a;ModuleNotFoundError: No module named ‘taming’ 【解决】 pip install taming-transformers 若发现安…

计算机毕设 基于时间序列的股票预测于分析

文章目录 1 简介2 时间序列的由来2.1 四种模型的名称&#xff1a; 3 数据预览4 理论公式4.1 协方差4.2 相关系数4.3 scikit-learn计算相关性 5 金融数据的时序分析5.1 数据概况5.2 序列变化情况计算 最后 1 简介 Hi&#xff0c;大家好&#xff0c;这里是丹成学长&#xff0c;今…

利用Pycharm将python文件打包为exe文件

前言 要将Python文件打包为可执行的EXE文件&#xff0c;您可以使用第三方工具&#xff0c;如PyInstaller、cx_Freeze或py2exe等。下面是使用PyInstaller来打包Python文件为EXE文件的步骤&#xff1a; 概述: PyInstaller 是一个用于将 Python 应用程序打包成可执行文件的工具…

大数据Flink(八十八):Interval Join(时间区间 Join)

文章目录 Interval Join&#xff08;时间区间 Join&#xff09; Interval Join&#xff08;时间区间 Join&#xff09; Interval Join 定义&#xff08;支持 Batch\Streaming&#xff09;&#xff1a;Interval Join 在离线的概念中是没有的。Interval Join 可以让一条流去 Jo…

kafka伪集群部署,使用docker环境拷贝模式

线上启动容器的方式是复制容器的运行环境出来&#xff0c;然后进行运行脚本的形式 1&#xff1a;在home/kafka目录下创建如下目录 2&#xff1a;复制kafka1容器内的数据/bitnami/kafka/data&#xff0c;直接放在1992_data里面&#xff0c;同理,复制kafka2容器内的数据/bitnami/…

GitHub配置SSH key

GitHub配置SSH key Git配置信息并生成密钥 设置用户名和密码 设置用户名 git config --global user.name "用户名" 设置邮箱 git confir --global user.email "邮箱" 生成密钥 ssh-keygen -t rsa -C "邮箱" 查看密钥 到密钥所保存的位置 复…

cgroup限制cpu使用率

写一段代码&#xff0c;如下所示&#xff0c;可以看到是单核拉满情况 #include <stdio.h> #include <pthread.h>int main() { int i 0; for(;;)i; return 0; }运行起来&#xff0c;通过top命令可以看到cpu使用率大致是100%&#xff0c;如下图所示&#xff1a; …

Python相关知识点

读取zip文件 import zipfilelistAipInfo zipfile.ZipFile(xxx.zip, r) print(listZipInfo.namelist()) # 以列表列出所有压缩文件列出所有被压缩的文件&#xff0c;以及文件名、文件大小和压缩结果大小。 for info in listZipInfo.infolist():print(info.filename, info.…

数据分析三剑客之一:Numpy详解及实战

1 NumPy介绍 NumPy 软件包是Python生态系统中数据分析、机器学习和科学计算的主力军。它极大地简化了向量和矩阵的操作处理。Python的一些主要软件包&#xff08;如 scikit-learn、SciPy、pandas 和 tensorflow&#xff09;都以 NumPy 作为其架构的基础部分。除了能对数值数据…

VMware下的ubuntu虚拟机,实现虚拟机与本地硬盘间的文件互传

本次安装vmware tools工具&#xff0c;以实现二者间的文件互传。 1、打开VMware软件&#xff0c;运行Ubuntu系统虚拟机 安装过程需在ubuntu虚拟机启动的情况下&#xff0c;才能进行安装&#xff1b; 2、安装VMware Tools 在VM主菜单栏中&#xff0c;点击 “虚拟机&#xff0…

【图论C++】Floyd算法(多源最短路径长 及 完整路径)

>>>竞赛算法 /*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * * brief 一直在算法竞赛学习的路上* * copyright 2023.9* COPYRIGHT 原创技术笔记&#xff…

【AI视野·今日NLP 自然语言处理论文速览 第四十四期】Fri, 29 Sep 2023

AI视野今日CS.NLP 自然语言处理论文速览 Fri, 29 Sep 2023 Totally 45 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers MindShift: Leveraging Large Language Models for Mental-States-Based Problematic Smartphone Use Interve…

【单片机】11-步进电机和直流电机

1.直流电机 1.什么是电机 电能转换为动能 2.常见电机 &#xff08;1&#xff09;交流电机【大功率】&#xff1a;两相【200W左右】&#xff0c;三相【1000W左右】 &#xff08;2&#xff09;直流电机【小功率】&#xff1a;永磁【真正的磁铁】&#xff0c;励磁【电磁铁】 &…

Mysql 安装搭建

文章目录 Mysql 搭建一、安装包下载二、创建用户组用户和修改权限三、配置my.cnf Mysql 搭建 一、安装包下载 mysql 下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 这里有所有的mysql的版本&#xff0c;下载自己需要的版本&#xff0c;我们这里下载 …

知识储备--基础算法篇-回溯法

1.回溯法介绍 1.1递归和回溯 每一个递归都包含回溯&#xff0c;回溯是一种纯暴力搜索方法。每个回溯法都可以抽象为一种N叉树。树的宽度为子集的个数&#xff0c;深度为递归返回的条件。二叉树中的递归都会有回溯算法&#xff0c;只不过有些题目用到了&#xff0c;有些没有用…

计算机竞赛 深度学习实现行人重识别 - python opencv yolo Reid

文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的行人重识别算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c…

R语言进行孟德尔随机化+meta分析(2)----基于R和stata

目前不少文章用到了孟德尔随机化meta分析&#xff0c;在上一章咱们简单介绍了一下meta分析的基础知识。咱们今天来介绍一篇11分文章&#xff0c;由文章看看孟德尔随机化meta分析如何进行&#xff0c;文章的题目是&#xff1a;Appraising the causal role of smoking in multipl…

大数据Doris(二):Doris原理篇

文章目录 Doris原理篇 一、Doris 特点 1、支持标准SQL接口 2、列式存储引擎

百度统计配置详细图文教程包含siteId、百度统计AccessToken、百度统计代码获取步骤教程

一、前言 很多网友开发者都不知道百度统计siteId、百度统计token怎么获取&#xff0c;在网上找的教程都是几年前老的教程&#xff0c;因此给大家出一期详细百度统计siteId、百度统计token、百度统计代码获取详细步骤教程。 二、登录到百度统计 1.1 登录到百度统计官网 使用个…

【利用冒泡排序的思想模拟实现qsort函数】

1.qsort函数 1.1qsort函数的介绍 资源来源于cplusplus网站 1.2qsort函数的主要功能 对数组的元素进行排序 对数组中由 指向的元素进行排序&#xff0c;每个元素字节长&#xff0c;使用该函数确定顺序。 此函数使用的排序算法通过调用指定的函数来比较元素对&#xff0c;并将指…