C++完美转发

完美转发是C++中为实现高效代码而引入的技术,与右值引用和移动语义相关。在完美转发前,需要通过重载实现copy和move语义,但会导致大量函数。std::forward的使用使得只需一个模板函数即可完美传递参数,简化了可变参数函数的实现。虽然未深入讨论,但右值引用的特性允许其绑定到不同类型的引用上。
摘要由CSDN通过智能技术生成

完美转发

一、完美转发不是语言必需的

首先要明确,正如你不必掌握模板也可以写出正确的代码,完美转发也不是不可替代的,完全可以用重载来代替它。

二、为什么要引入完美转发

引入完美转发是因为引入了右值引用和移动语义
有时候我们为了效率,不仅要提供copy语义,还要提供move语义的实现。
在完美转发出现之前,我们只能通过重载来实现。

#include <iostream>
using namespace std;

//bar可以是第三方的代码
//foo是我们要实现的代码
void bar(const int&v){
   
	cout<<"const bar"<<endl;
}
void bar(int&v){
   
	cout<<"lv bar"<<endl;
}
void bar(int&&v){
   
	cout<<"rv bar"<<endl;
}

//我们希望foo的功能根据参数的类型有不同的实现
void foo(int&v){
   
	bar(v);
}

void foo(int&&v){
   
	//我们希望以右值传入bar
	//所以这里不能写成bar(v)
	bar(std::move(v));
}

int main(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值