【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;
相关推荐
励志不掉头发的内向程序员5 分钟前
STL库——AVL树
开发语言·c++·学习
晨非辰2 小时前
#C语言——刷题攻略:牛客编程入门训练(十一):攻克 循环控制(三),轻松拿捏!
c语言·开发语言·经验分享·学习·visual studio
励志码农4 小时前
JavaWeb 30 天入门:第二十三天 —— 监听器(Listener)
java·开发语言·spring boot·学习·servlet
天高云淡ylz4 小时前
子网掩码的隐形陷阱:为何能ping通却无法HTTPS访问
开发语言·php
汉克老师6 小时前
第十四届蓝桥杯青少组C++选拔赛[2023.2.12]第二部分编程题(5、机甲战士)
c++·算法·蓝桥杯·01背包·蓝桥杯c++·c++蓝桥杯
希望20176 小时前
Golang Panic & Throw & Map/Channel 并发笔记
开发语言·golang
朗迹 - 张伟6 小时前
Golang安装笔记
开发语言·笔记·golang
yzx9910136 小时前
生活在数字世界:一份人人都能看懂的网络安全生存指南
运维·开发语言·网络·人工智能·自动化
小周同学@6 小时前
谈谈对this的理解
开发语言·前端·javascript
Mr_Xuhhh7 小时前
项目需求分析(2)
c++·算法·leetcode·log4j