Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Tworzy typ odwołania rvalue parametru szablonu, jeśli jest to obiekt lub typ funkcji. W przeciwnym razie ze względu na semantyka zwijania odwołań typ jest taki sam jak parametr szablonu.
Składnia
template <class T>
struct add_rvalue_reference;
template <class T>
using add_rvalue_reference_t = typename add_rvalue_reference<T>::type;
Parametry
T
Typ do modyfikacji.
Uwagi
Klasa add_rvalue_reference ma składową o nazwie type, która jest aliasem typu odwołania rvalue do parametru szablonu T. Semantyka zwijania odwołań oznacza, że w przypadku typów innych niż object i innych niż funkcje T jest T. T&& Na przykład gdy T jest typem odwołania lvalue, add_rvalue_reference<T>::type jest typem odwołania lvalue, a nie odwołaniem do wartości rvalue.
Dla wygody <type_traits> definiuje szablon pomocnika , add_rvalue_reference_tktóry aliasuje type element członkowski .add_rvalue_reference
Przykład
W tym przykładzie kodu użyto static_assert, aby pokazać, jak typy odwołań rvalue są tworzone przy użyciu poleceń add_rvalue_reference i add_rvalue_reference_t, oraz jak wynik add_rvalue_reference typu odwołania lvalue nie jest odwołaniem rvalue, ale zwija się do typu odwołania 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.
*/
Wymagania
Nagłówek: <type_traits>
Przestrzeń nazw: std
Zobacz też
<type_traits>
add_lvalue_reference, klasa
is_rvalue_reference, klasa