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 |
댓글