move和forward完美转发

  • 产生条件:一个右值引用参数作为函数的形参,在函数内部再转发该参数的时候它已经变成一个左值------>std::move和std::forward应运而生;
  • move vs forward:move----->无条件转换为右值;forward----->保持原参数属性,即完美转发;
  • 举例说明
#ifndef _TRANS_H__
#define _TRANS_H__

#include "stdafx.h"

class CTrans
{
public:
	template
	void Print(T& t)
	{
		printf("lVaule\n");
	}

	template
	void Print(T&& t)
	{
		printf("rValue\n");
	}

	template
	void Forward(T&& t)
	{
		Print(t);//左值(规则)
		Print(std::move(t));//右值
		Print(std::forward(t));//保持原属性
	}
public:
	CTrans() = default;
	~CTrans() = default;
};

#end

你可能感兴趣的:(c11,c++)