move和forward完美转发
程序员文章站
2024-03-14 11:18:58
...
- 产生条件:一个右值引用参数作为函数的形参,在函数内部再转发该参数的时候它已经变成一个左值------>std::move和std::forward应运而生;
- move vs forward:move----->无条件转换为右值;forward----->保持原参数属性,即完美转发;
- 举例说明:
#ifndef _TRANS_H__
#define _TRANS_H__
#include "stdafx.h"
class CTrans
{
public:
template<typename T>
void Print(T& t)
{
printf("lVaule\n");
}
template<typename T>
void Print(T&& t)
{
printf("rValue\n");
}
template<typename T>
void Forward(T&& t)
{
Print(t);//左值(规则)
Print(std::move(t));//右值
Print(std::forward<T>(t));//保持原属性
}
public:
CTrans() = default;
~CTrans() = default;
};
#endif /*_TRANS_H__*/
- 调用:
#include "stdafx.h"
#include "trans.hpp"
int _tmain(int argc, _TCHAR* argv[])
{
CTrans objTrans;
int iTemp = 4;
objTrans.Forward(2);//右值
printf("===============================================\n");
objTrans.Forward(iTemp);//左值
printf("===============================================\n");
objTrans.Forward(std::move(iTemp));//右值
printf("===============================================\n");
objTrans.Forward(std::forward<int&>(iTemp));//iTemp->int&:左值
printf("===============================================\n");
return 0;
}
- 结果:
上一篇: Envoy 1.14.1配置入门
推荐阅读
-
move和forward完美转发
-
cpp const引用和右值引用的区别,std::move(移动语义), std::forward(完美转发)
-
Effective Modern C++ 条款23 理解std::move和std::forward
-
Servlet中请求转发时forward()和include()的区别
-
Servlet中forward(请求转发)和redirect( 重定向)总结 forwardredirect
-
Effective Modern C++ 条款23 理解std::move和std::forward
-
浅析C++11中的右值引用、转移语义和完美转发
-
《深入理解C++11》笔记–右值引用:移动语义和完美转发
-
浅析C++11中的右值引用、转移语义和完美转发
-
右值引用、移动语义和完美转发(上)