본문 바로가기
프로그래밍/Modern c++

전달 참조(forwarding reference)

by 오늘의논리 2023. 3. 6.
728x90

보편참조(universal reference)

전달참조(forwarding reference)

 

&& :       & 두번 -> 오른값 참조

 

전달 참조 : 왼값을 넣으면 왼값 참조, 오른값을 넣어주면 오른값 참조가

 

오른값 : 왼값이 아니다 = 단일식에서 벗어나면 사용 X

오른값 참조 : 오른값만 참조 있는 참조 타입

 

class Knight
{
public:
	Knight()
	{
		cout << "Knight()" << endl;
	}
	Knight(const Knight& knight)// 복사 생성자
	{
		cout << "const Knight&" << endl;
	}
	Knight(Knight&& knight) noexcept// 이동생성자
	{
		cout << " Knight&& " << endl;
	}
	~Knight()
	{
	}

	

public:
	int _hp = 100;

};

void Test_Rvalue(Knight&& k) // 오른값 참조
{

}

void Test_Copy(Knight k) {}

template<typename T>
void Test_ForwardingRef(T&& param) // 전달 참조
{
	//왼값 참조라면 복사
	//오른값 참조라면 이동
	Test_Copy(forward<T>(param));
}


int main()
{
	Knight k1;
	
	Test_Rvalue(move(k1)); // rvalue_cast

	Test_ForwardingRef(k1); //
	Test_ForwardingRef(move(k1));

	//공통점 : 형식언어(type deduction) 이 일어날때
	//전달 참조를 구별하는 방법

	return 0;
}
728x90

'프로그래밍 > Modern c++' 카테고리의 다른 글

스마트 포인터  (0) 2023.03.06
lamda 람다  (0) 2023.03.06
오른값 참조(rvalue reference)  (0) 2023.03.06
override  (0) 2023.03.06
delete(삭제된 함수)  (0) 2023.03.06

댓글