다음을 통해 공유


add_rvalue_reference 클래스

개체 또는 함수 형식인 경우 템플릿 매개 변수의 rvalue 참조 형식을 만듭니다. 아닌 경우, 참조 축소에 대한 의미 체계 때문에 형식이 템플릿 매개 변수와 동일합니다.

구문

template <class T>
struct add_rvalue_reference;

template <class T>
using add_rvalue_reference_t = typename add_rvalue_reference<T>::type;

매개 변수

T
수정할 형식입니다.

설명

클래스에는 add_rvalue_reference 템플릿 매개 변수 T에 대한 rvalue 참조 형식의 별칭인 이름이 지정된 type멤버가 있습니다. 참조 축소의 의미 체계는 비 개체 및 비 함수 형식 T의 경우 TT&&임을 의미합니다. 예를 들어 T가 lvalue 참조 형식 add_rvalue_reference<T>::type 인 경우 rvalue 참조가 아닌 lvalue 참조 형식입니다.

편의를 <위해 type_traits> 도우미 템플릿을 정의합니다. 이 템플릿add_rvalue_reference_t은 멤버add_rvalue_referencetype 별칭으로 지정합니다.

예시

static_assert를 사용하는 이 코드 예제에서는 add_rvalue_referenceadd_rvalue_reference_t를 사용하여 rvalue 참조 형식을 만드는 방법과 lvalue 참조 형식에 대한 add_rvalue_reference의 결과가 rvalue 참조가 아닌 lvalue 참조 형식으로 축소되는 방법을 보여 줍니다.

// ex_add_rvalue_reference.cpp
// Build by using: cl /EHsc /W4 ex_add_rvalue_reference.cpp
#include <type_traits>
#include <iostream>
#include <string>

using namespace std;
int main()
{
    static_assert(is_same<add_rvalue_reference<string>::type, string&&>::value,
        "Expected add_rvalue_reference_t<string> to be string&&");
    static_assert(is_same<add_rvalue_reference_t<string*>, string*&&>::value,
        "Expected add_rvalue_reference_t<string*> to be string*&&");
    static_assert(is_same<add_rvalue_reference<string&>::type, string&>::value,
        "Expected add_rvalue_reference_t<string&> to be string&");
    static_assert(is_same<add_rvalue_reference_t<string&&>, string&&>::value,
        "Expected add_rvalue_reference_t<string&&> to be string&&");
    cout << "All static_assert tests of add_rvalue_reference passed." << endl;
    return 0;
}

/*Output:
All static_assert tests of add_rvalue_reference passed.
*/

요구 사항

헤더: <type_traits>

네임스페이스: std

참고 항목

<type_traits>
add_lvalue_reference 클래스
is_rvalue_reference 클래스