Udostępnij za pośrednictwem


<type_traits>, funkcje

is_assignable
is_copy_assignable
is_copy_constructible
is_default_constructible
is_move_assignable
is_move_constructible
is_nothrow_move_assignable
is_nothrow_swappable
is_nothrow_swappable_with
is_swappable
is_swappable_with
is_trivially_copy_assignable
is_trivially_move_assignable
is_trivially_move_constructible

is_assignable

Sprawdza, czy wartość typu From może być przypisana do typu Do .

template <class To, class From>
struct is_assignable;

Parametry

Do
Typ obiektu, który odbiera przypisanie.

Od
Typ obiektu, który udostępnia wartość.

Uwagi

Nieszacowane wyrażenie declval<To>() = declval<From>() musi być poprawnie sformułowane. Zarówno od , jak i do muszą być kompletnymi typami, voidlub tablicami nieznanej granicy.

is_copy_assignable

Sprawdza, czy typ można skopiować przy przypisaniu.

template <class Ty>
struct is_copy_assignable;

Parametry

Ty
Typ do zapytania.

Uwagi

Wystąpienie predykatu typu ma wartość true, jeśli typ Ty jest klasą, która ma operator przypisania kopiowania, w przeciwnym razie przechowuje wartość false. Odpowiednik is_assignable<Ty&, const Ty&>.

is_copy_constructible

Sprawdza, czy typ ma konstruktor kopiujący.

template <class Ty>
struct is_copy_constructible;

Parametry

Ty
Typ do zapytania.

Uwagi

Wystąpienie predykatu typu ma wartość true, jeśli typ Ty jest klasą, która ma konstruktor kopiujący, w przeciwnym razie przechowuje wartość false.

Przykład

#include <type_traits>
#include <iostream>

struct Copyable
{
    int val;
};

struct NotCopyable
{
   NotCopyable(const NotCopyable&) = delete;
   int val;

};

int main()
{
    std::cout << "is_copy_constructible<Copyable> == " << std::boolalpha
        << std::is_copy_constructible<Copyable>::value << std::endl;
    std::cout << "is_copy_constructible<NotCopyable> == " << std::boolalpha
        << std::is_copy_constructible<NotCopyable>::value << std::endl;

    return (0);
}
is_copy_constructible<Copyable> == true
is_copy_constructible<NotCopyable > == false

is_default_constructible

Sprawdza, czy typ ma konstruktor domyślny.

template <class Ty>
struct is_default_constructible;

Parametry

T
Typ do zapytania.

Uwagi

Wystąpienie predykatu typu ma wartość true, jeśli typ T jest typem klasy, który ma konstruktor domyślny, w przeciwnym razie przechowuje wartość false. Jest to odpowiednik predykatu is_constructible<T>. Typ T musi być kompletnym typem, voidlub tablicą nieznanej granicy.

Przykład

#include <type_traits>
#include <iostream>

struct Simple
{
    Simple() : val(0) {}
    int val;
};

struct Simple2
{
    Simple2(int v) : val(v) {}
    int val;
};

int main()
{
    std::cout << "is_default_constructible<Simple> == " << std::boolalpha
        << std::is_default_constructible<Simple>::value << std::endl;
    std::cout << "is_default_constructible<Simple2> == " << std::boolalpha
        << std::is_default_constructible<Simple2>::value << std::endl;

    return (0);
}
is_default_constructible<Simple> == true
is_default_constructible<Simple2> == false

is_move_assignable

Sprawdza, czy typ można przenieść.

template <class T>
struct is_move_assignable;

Parametry

T
Typ do zapytania.

Uwagi

Typ jest przypisywany, jeśli odwołanie rvalue do typu można przypisać do odwołania do typu. Predykat typu jest odpowiednikiem is_assignable<T&, T&&>. Typy przypisywane do przenoszenia obejmują przywoływalne typy skalarne i typy klas, które mają operatory przypisania przenoszenia generowane przez kompilator lub zdefiniowane przez użytkownika.

is_move_constructible

Sprawdza, czy typ ma konstruktor przenoszenia.

template <class T>
struct is_move_constructible;

Parametry

T
Typ, który ma zostać oceniony

Uwagi

Predykat typu, który daje wartość true, jeśli typ T można skonstruować przy użyciu operacji przenoszenia. Ten predykat jest odpowiednikiem is_constructible<T, T&&>.

is_nothrow_move_assignable

Sprawdza, czy typ ma nothrow operator przypisania przenoszenia.

template <class Ty>
struct is_nothrow_move_assignable;

Parametry

Ty
Typ do zapytania.

Uwagi

Wystąpienie predykatu typu ma wartość true, jeśli typ Ty ma operator przypisania przenoszenia nothrow, w przeciwnym razie zawiera wartość false.

is_nothrow_swappable

template <class T> struct is_nothrow_swappable;

is_nothrow_swappable_with

template <class T, class U> struct is_nothrow_swappable_with;

is_swappable

template <class T> struct is_swappable;

is_swappable_with

template <class T, class U> struct is_swappable_with;

is_trivially_copy_assignable

Sprawdza, czy typ ma trywialny operator przypisania kopiowania.

template <class Ty>
struct is_trivially_copy_assignable;

Parametry

T
Typ do zapytania.

Uwagi

Wystąpienie predykatu typu ma wartość true, jeśli typ T jest klasą, która ma trywialny operator przypisania kopiowania, w przeciwnym razie przechowuje wartość false.

Konstruktor przypisania dla klasy T jest trywialny, jeśli jest niejawnie podany, klasa T nie ma żadnych funkcji wirtualnych, klasa T nie ma wirtualnych baz, klasy wszystkich niestatyczne składowe danych typu klasy mają trywialne operatory przypisania, a klasy wszystkich niestacjonalnych składowych danych tablicy typów klasy mają trywialne operatory przypisania.

is_trivially_move_assignable

Sprawdza, czy typ ma trywialny operator przypisania przenoszenia.

template <class Ty>
struct is_trivially_move_assignable;

Parametry

Ty
Typ do zapytania.

Uwagi

Wystąpienie predykatu typu ma wartość true, jeśli typ Ty jest klasą, która ma trywialny operator przypisania przenoszenia, w przeciwnym razie zawiera wartość false.

Operator przypisania przenoszenia dla klasy Ty jest trywialny, jeśli:

jest ona dostarczana niejawnie

klasa Ty nie ma funkcji wirtualnych

klasa Ty nie ma wirtualnych baz

klasy wszystkich niestacjonalnych składowych danych typu klasy mają trywialne operatory przypisania przenoszenia

klasy wszystkich niestacjonalnych składowych danych tablicy typów klasy mają proste operatory przypisania przenoszenia

is_trivially_move_constructible

Sprawdza, czy typ ma trywialny konstruktor przenoszenia.

template <class Ty>
struct is_trivially_move_constructible;

Parametry

Ty
Typ do zapytania.

Uwagi

Wystąpienie predykatu typu ma wartość true, jeśli typ Ty jest klasą, która ma trywialny konstruktor przenoszenia, w przeciwnym razie zawiera wartość false.

Konstruktor przenoszenia dla klasy Ty jest trywialny, jeśli:

jest niejawnie zadeklarowany

jego typy parametrów są równoważne typom niejawnej deklaracji

klasa Ty nie ma funkcji wirtualnych

klasa Ty nie ma wirtualnych baz

klasa nie ma nietrwałych składowych danych niestacjonanych

wszystkie bezpośrednie podstawy klasy Ty mają trywialne konstruktory przenoszenia

klasy wszystkich niestacjonalnych składowych danych typu klasy mają proste konstruktory przenoszenia

klasy wszystkich niestacjonalnych składowych danych tablicy typów klasy mają proste konstruktory przenoszenia

Zobacz też

<type_traits>