【Effective Modern C++】条款24:区分万能引用和右值引用

条款24:区分万能引用和右值引用

万能引用既可以是左值引用,也可以是右值引用。

一、模板中的万能引用

要求:T && + 类型推导。

cpp 复制代码
template<typename T>
void f(T &&param);   // param是一个万能引用

template<typename T>
void f(std::vector<T> &&param);  // 右值引用,因为不是形如 T &&

// std::vector内的push_back成员函数
void push_back(T &&x); // 右值引用,因为不涉及类型推导,vector实例的类型已经确定了push_back的参数类型

用左值初始化万能引用就会得到一个左值引用,用右值初始化万能引用就会得到一个右值引用。

二、可变参数模板的万能引用

要求:Args&&... + 类型推导

cpp 复制代码
// std::vector的emplace_back
template<class... Args>
void emplace_back(Args&&... args); 
// 万能引用,因为类型形参Args独立于vector的类型形参T,每次emplace_back的时候都要进行推导

三、auto的万能引用

要求:auto&&/auto&&... + 类型推导

cpp 复制代码
auto &&var2 = var1;
相关推荐
Albert Edison6 分钟前
Python入门基础
开发语言·python
小余吃大鱼11 分钟前
OpenStack私有云详细介绍
开发语言·php·openstack
画个大饼16 分钟前
Swift:什么是Optional?其背后的机制是什么?什么是Unconditional Unwrapping?
开发语言·ios·swift
T0uken18 分钟前
【Python】Matplotlib:立体永生花绘制
开发语言·python·matplotlib
sniper_fandc20 分钟前
JVM(Java虚拟机)详解
java·开发语言·jvm
雾削木21 分钟前
mAh 与 Wh:电量单位的深度解析
开发语言·c++·单片机·嵌入式硬件·算法·电脑
__lost23 分钟前
小球在摆线上下落的物理过程MATLAB代码
开发语言·算法·matlab
AI的魔盒25 分钟前
基于Java与MAVLink协议的多无人机(Cube飞控)集群控制与调度方案问题
java·开发语言·无人机
一颗知足的心1 小时前
Go语言之路————指针、结构体、方法
开发语言·后端·golang
yuanpan1 小时前
C#如何正确的停止一个多线程Task?CancellationTokenSource 的用法。
开发语言·c#