【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;
相关推荐
csbysj20206 分钟前
Web 标准
开发语言
91刘仁德21 分钟前
c++类和对象(下)
c语言·jvm·c++·经验分享·笔记·算法
老姚---老姚22 分钟前
在windows下编译go语言编写的dll库
开发语言·windows·golang
diediedei32 分钟前
模板编译期类型检查
开发语言·c++·算法
穿过锁扣的风41 分钟前
零基础入门 Python 爬虫:从基础到实战,爬取虎扑 / 豆瓣 / 图片全掌握
开发语言·爬虫·python
mmz12071 小时前
分治算法(c++)
c++·算法
一切尽在,你来1 小时前
C++多线程教程-1.2.1 C++11/14/17 并发特性迭代
开发语言·c++
80530单词突击赢1 小时前
C++入门指南:从零到精通
开发语言·c++
小突突突1 小时前
浅谈Java中的反射
java·开发语言
csbysj20201 小时前
JSP 发送邮件教程
开发语言