【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;
相关推荐
蔗理苦8 分钟前
2025-10-07 Python不基础 20——全局变量与自由变量
开发语言·python
夜月yeyue20 分钟前
个人写HTOS移植shell
c++·mcu·算法·性能优化·架构·mfc
ajassi200022 分钟前
开源 C++ QT QML 开发(九)文件--文本和二进制
c++·qt·开源
-森屿安年-32 分钟前
C++ 类与对象
开发语言·c++
ajassi200040 分钟前
开源 C++ QT QML 开发(八)自定义控件--圆环
c++·qt·开源
小蒜学长1 小时前
springboot基于javaweb的小零食销售系统的设计与实现(代码+数据库+LW)
java·开发语言·数据库·spring boot·后端
深思慎考1 小时前
Linux二进制查看工具——hexdump
linux·c++·二进制·文件查看·hexdump
会开花的二叉树1 小时前
c语言贪吃蛇游戏开发
c语言·开发语言
韩立学长1 小时前
【开题答辩实录分享】以《C#大型超市商品上架调配管理系统的设计与实现》为例进行答辩实录分享
开发语言·c#
十重幻想1 小时前
PTA6-4 使用函数统计指定数字的个数(C)
c语言·c++·算法