欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
}
  • 结果

move和forward完美转发

相关标签: c11 c++

上一篇: Envoy 1.14.1配置入门

下一篇: