C++ 万能引用实现完美转发示例

万能引用

万能引用的一种常见使用场景是用在模板函数中:

template<class T>
void  fun(T&& t) {
//...
}

函数参数t就是一个万能引用,万能引用在这里的作用,简单来说就是它既能够接收左值也能接受右值

验证函数

定义一个参数为万能引用的验证函数,其根据具体接受到的是左值引用还是右值引用,分别打印不同的值:

template<class T>
void f(T &&x) {if (is_lvalue_reference_v<decltype(x)>)//接受到是左值引用cout << "lv" << endl;else if (is_rvalue_reference_v<decltype(x)>)//接受到的是右值引用cout << "rv" << endl;
}

完美转发

调用std::forwrad<>来传递引用x的具体引用类型

template<class T>
void out1(T &&x) {f(std::forward<T>(x));
}

测试:

int main() {int x = 1;out1(x);out1(std::move(x));
}

输出:

lv
rv

需要注意的是,就函数out1的参数 引用x自身而言,无论其是左值引用还是右值引用,x本身都是一个左值,所以若函数内部直接调用f(x),则相当于传递传递的始终是左值,例:

template<class T>
void out2(T &&x) {f(x);
}

测试:

int main() {int x = 1;out2(x);out2(std::move(x));
}

输出:

lv
lv


参考:
https://en.cppreference.com/w/cpp/types/is_lvalue_reference
https://blog.csdn.net/lichao201005/article/details/124264766

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

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

相关文章

组件化、跨平台…未来前端框架将如何演进?

前端框架在过去几年间取得了显著的进步和演进。前端框架也将继续不断地演化&#xff0c;以满足日益复杂的业务需求和用户体验要求。从全球web发展角度看&#xff0c;框架竞争已经从第一阶段的前端框架之争&#xff08;比如Vue、React、Angular等&#xff09;&#xff0c;过渡到…

powerdesigner各种字体设置;preview字体设置;sql字体设置

1.设置左侧菜单&#xff1a; 步骤如下&#xff1a; tools —> general options —> fonts —> defalut UI font ,选择字体样式及大小即可&#xff0c;同下图。 2.设置preview字体大小&#xff08;sql预览&#xff09; 步骤如下&#xff1a; tools —> general o…

c语言实现简单的tcp服务端

功能&#xff1a;监听本地8888端口&#xff0c;接收到客户端连接请求后创建线程单独处理与客户端的交互&#xff0c;支持同时与多个客户端交互。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/…

Mac隐藏和显示文件

由于之前没有使用过Mac本&#xff0c;所以很多地方都不太清楚&#xff0c;在下载git项目的时候&#xff0c;发现没有.git文件&#xff0c; 一开始还以为下载错了&#xff0c;但是git命令是可以看到远端分支以及当前分支的&#xff0c;之后在一次解压文件的时候发现&#xff0c;…

【音频分离】demucs V3的环境搭建及训练(window)

文章目录 一、环境搭建&#xff08;1&#xff09;新建虚拟环境&#xff0c;并进入&#xff08;2&#xff09;安装pyTorch&#xff08;3&#xff09;进入代码文件夹&#xff0c;批量安装包&#xff08;4&#xff09;安装其他需要的包 二、数据集准备&#xff08;1&#xff09;下…

数据采集的方法有哪些?

近年来&#xff0c;国家和各大企业都在部署大数据战略。“大数据”这个词也越来越频繁地出现在我们的生活中。当我们在进行网上冲浪时&#xff0c;页面总会跳出我们想要搜索的相关产品或关联事物。大数据&#xff0c;似乎总是能够“算”出我们“心中所想”。那么&#xff0c;大…

sqlserver 判断字符串是否为数字

在 SQL Server 中&#xff0c;可以使用以下方法判断一个字符串是否为数字&#xff1a; 使用 ISNUMERIC() 函数&#xff1a;这个函数可以判断一个字符串是否可以转换为数字。例如&#xff1a; SELECT 123 AS NumberStr, 123.45 AS DecimalStr, abc AS NonNumericStr WHERE ISN…

基于ssm民宿管理系统

使用Springboot部署的&#xff0c;基于ssm架构的民宿管理系统。集订单预定与博客功能为一体。 简介 享宿&#xff0c;即民宿出租预定平台主要为需要房屋租住的用户提供高效便捷、轻松贴心的移动式房源查找及租住平台。结合博客分享功能意在丰富房源的同时带动订单销售&#xff…

SpringBoot第23讲:SpringBoot集成MySQL - 基于JPA的封装

SpringBoot第23讲&#xff1a;SpringBoot集成MySQL - 基于JPA的封装 在实际开发中&#xff0c;最为常见的是基于数据库的CRUD封装等&#xff0c;比如SpringBoot集成MySQL数据库&#xff0c;常用的方式有JPA和MyBatis&#xff1b; 本文是SpringBoot第23讲&#xff0c;主要介绍基…

JVM基础篇-直接内存

JVM基础篇-直接内存 什么是直接内存? 直接内存( 堆外内存 ) 指的是 Java 应用程序通过直接方式从操作系统中申请的内存,这块内存不属于jvm 传统方式读取文件 首先会从用户态切换到内核态&#xff0c;调用操作系统函数从磁盘读取文件&#xff0c;读取一部分到操作系统缓冲区…

openGauss学习笔记-29 openGauss 高级数据管理-UNION子句

文章目录 openGauss学习笔记-29 openGauss 高级数据管理-UNION子句29.1 语法格式29.2 示例29.2.1 UNION29.2.2 UNION ALL openGauss学习笔记-29 openGauss 高级数据管理-UNION子句 UNION计算多个SELECT语句返回行集合的并集。UNION内部的SELECT语句必须拥有相同数量的列&#…

【微信小程序】父组件修改子组件数据或调用子组件方法

一、使用场景 页面中用到了自定义组件形成父子组件关系&#xff0c;在父组件某个特定时期想要操作子组件中的数据或方法&#xff0c;比如离开页面的时候清空子组件的数据。 二、方法 父组件可以通过this.selectComponent方法获取子组件实例对象&#xff0c;这样就可以直接访…

新一代开源流数据湖平台Apache Paimon入门实操-上

文章目录 概述定义核心功能适用场景架构原理总体架构统一存储基本概念文件布局 部署环境准备环境部署 实战Catalog文件系统Hive Catalog 创建表创建Catalog管理表查询创建表&#xff08;CTAS&#xff09;创建外部表创建临时表 修改表修改表修改列修改水印 概述 定义 Apache Pa…

【Spring】Spring之配置类解析源码解析

代码入口&#xff1a; // 创建一个Spring容器 AnnotationConfigApplicationContext applicationContext new AnnotationConfigApplicationContext(AppConfig.class);核心代码&#xff1a; // AnnotatedBeanDefinitionReader#register // componentClasses为传入的AppConfig.…

【MFC】02.文件类与常用基础控件-笔记

基本概念 MFC Microsoft Fundation class 微软基础类库 框架 基于Win32 SDK进行的封装 属性&#xff1a;缓解库关闭 属性->C/C/代码生成/运行库/MTD 属性->常规->MFC的使用&#xff1a;在静态库中使用MFC&#xff0c;默认是使用的共享DLL&#xff0c;运行时库 SD…

Ubuntu Find命令详解

一、Find命令简介 Ubuntu的Find命令是一种常用的终端指令&#xff0c;用于在文件系统中查找符合条件的文件和目录。该命令的语法格式如下&#xff1a; find [PATH] [OPTION] [EXPRESSION]其中&#xff0c;PATH表示待查找的目录&#xff0c;OPTION为选项参数&#xff0c;EXPRES…

【JavaSE】初步认识类和对象

【本节目标】 1. 掌握类的定义方式以及对象的实例化 2. 掌握类中的成员变量和成员方法的使用 3. 掌握对象的整个初始化过程 目录 1. 面向对象的初步认知 2. 类定义和使用 3. 类的实例化 4. this引用 1. 面向对象的初步认知 1.1 什么是面向对象 Java是一门纯面向对象的语…

Excel如何把两列互换

第一步&#xff1a;选择一列 打开excel&#xff0c;选中一列后将鼠标放在列后&#xff0c;让箭头变成十字方向。 第二步&#xff1a;选择Shift键 按住键盘上的Shift键&#xff0c;将列往后移动变成图示样。 第三步&#xff1a;选择互换 完成上述操作后&#xff0c;松开鼠标两…

Vue页面分享QQ\QQ空间\微博\微信

1、封装js代码&#xff1a;share.js文件 // share.js // url - 需要分享的页面地址&#xff08;当前页面地址&#xff09; // title - 分享的标题&#xff08;文章标题&#xff09;// QQ空间 export function toQQzone(url, title) {url encodeURIComponent(url)title encod…

层叠上下文

一、层叠上下文 在CSS2.1规范中&#xff0c;每个盒模型的位置是三维的&#xff0c;分别是平面画布上的x轴&#xff0c;y轴以及表示层叠的z轴&#xff0c;层叠上下文即元素在某个层级上z轴方向的排列关系。假定用户正面向&#xff08;浏览器&#xff09;视窗或网页&#xff0c;…