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_reference
를 type
별칭으로 지정합니다.
예시
static_assert를 사용하는 이 코드 예제에서는 add_rvalue_reference
및 add_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 클래스