完美转发
一、完美转发不是语言必需的
首先要明确,正如你不必掌握模板也可以写出正确的代码,完美转发也不是不可替代的,完全可以用重载来代替它。
二、为什么要引入完美转发
引入完美转发是因为引入了右值引用和移动语义。
有时候我们为了效率,不仅要提供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

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

被折叠的 条评论
为什么被折叠?



