Пространства имён
Варианты
Действия

std::is_move_constructible, std::is_trivially_move_constructible, std::is_nothrow_move_constructible

Материал из cppreference.com
< cpp‎ | types
 
 
 
Поддержка типов
Основные типы
Оригинал:
Basic types
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Основные типы
Исправлены типы целых ширину (C++11)
Числовые пределы
Оригинал:
Numeric limits
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
numeric_limits
С числовым ограничивает интерфейс
Время тип информации
Оригинал:
Runtime type information
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Тип черты
Оригинал:
Type traits
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Первичные категории типа
Оригинал:
Primary type categories
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
is_void(C++11)
is_array(C++11)
is_pointer(C++11)
is_enum(C++11)
is_union(C++11)
is_class(C++11)
is_function(C++11)
is_object(C++11)
is_scalar(C++11)
is_compound(C++11)
is_integral(C++11)
is_floating_point(C++11)
is_fundamental(C++11)
is_arithmetic(C++11)
is_reference(C++11)
is_lvalue_reference(C++11)
is_rvalue_reference(C++11)
is_member_pointer(C++11)
is_member_object_pointer(C++11)
is_member_function_pointer(C++11)
Тип свойства
Оригинал:
Type properties
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
is_const(C++11)
is_volatile(C++11)
is_pod(C++11)
is_empty(C++11)
is_polymorphic(C++11)
is_abstract(C++11)
Поддерживаемые операции
Оригинал:
Supported operations
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
is_constructible
is_trivially_constructible
is_nothrow_constructible
(C++11)
(C++11)
(C++11)
is_default_constructible
is_trivially_default_constructible
is_nothrow_default_constructible
(C++11)
(C++11)
(C++11)
is_copy_constructible
is_trivially_copy_constructible
is_nothrow_copy_constructible
(C++11)
(C++11)
(C++11)
is_move_constructible
is_trivially_move_constructible
is_nothrow_move_constructible
(C++11)
(C++11)
(C++11)
is_assignable
is_trivially_assignable
is_nothrow_assignable
(C++11)
(C++11)
(C++11)
is_copy_assignable
is_trivially_copy_assignable
is_nothrow_copy_assignable
(C++11)
(C++11)
(C++11)
is_move_assignable
is_trivially_move_assignable
is_nothrow_move_assignable
(C++11)
(C++11)
(C++11)
is_destructible
is_trivially_destructible
is_nothrow_destructible
(C++11)
(C++11)
(C++11)
has_virtual_destructor(C++11)
Отношения собственности и запросов
Оригинал:
Relationships and property queries
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
is_same(C++11)
is_base_of(C++11)
is_convertible(C++11)
alignment_of(C++11)
rank(C++11)
extent(C++11)
Тип модификаций
Оригинал:
Type modifications
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
remove_cv
remove_const
remove_volatile
(C++11)
(C++11)
(C++11)
add_cv
add_const
add_volatile
(C++11)
(C++11)
(C++11)
make_signed(C++11)
make_unsigned(C++11)
Тип преобразования
Оригинал:
Type transformations
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
aligned_storage(C++11)
aligned_union(C++11)
decay(C++11)
enable_if(C++11)
conditional(C++11)
common_type(C++11)
underlying_type(C++11)
result_of(C++11)
Введите черта констант
Оригинал:
Type trait constants
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
integral_constant(C++11)
 
Определено в заголовочном файле <type_traits>
template< class T >
struct is_move_constructible;
(1) (начиная с C++11)
template< class T >
struct is_trivially_move_constructible;
(2) (начиная с C++11)
template< class T >
struct is_nothrow_move_constructible;
(3) (начиная с C++11)

1) Если из T нельзя сделать ссылку (например из, с возможными cv-квалификаторами void или из типа функции с последовательностью cv-квалификаторов или квалификатором ссылки), то предоставляет константу-член value, которая будет равна false, иначе её значение будет равно std::is_constructible<T, T&&>::value.

2) Также как и (1), но используется std::is_trivially_constructible<T, T&&>.

3) Также как и (2), но используется std::is_nothrow_constructible<T, T&&>.

T должен быть завершенным типом, (с возможными cv-квалификаторами) void или массивом с неизвестными границами. Иначе поведение будет не определено.

Содержание

[править] Вспомогательные шаблонные переменные

template< class T >
constexpr bool is_move_constructible_v = is_move_constructible<T>::value;
template< class T >
constexpr bool is_trivially_move_constructible_v = is_trivially_move_constructible<T>::value;
template< class T >
constexpr bool is_nothrow_move_constructible_v = is_nothrow_move_constructible<T>::value;

Унаследован от std::integral_constant

Константы-члены

value
[static]
true, если T имеет семантику переноса , иначе false
(public static константа-член)

Функции-члены

operator bool
Преобразует объект в bool, возвращается value
(public функция-член)
operator()
(C++14)
Возвращает value
(public функция-член)

Типы-члены

Тип Определение
value_type bool
type std::integral_constant<bool, value>

[править] Возможная реализация

template<class T>
struct is_move_constructible :
      std::is_constructible<T, typename std::add_rvalue_reference<T>::type> {};
 
template<class T>
struct is_trivially_move_constructible :
     std::is_trivially_constructible<T, typename std::add_rvalue_reference<T>::type> {};
 
template<class T>
struct is_nothrow_move_constructible :
     std::is_nothrow_constructible<T, typename std::add_rvalue_reference<T>::type> {};

[править] Примечание

Типы без конструктора переноса, но с конструктором копирования, который принимает аргумент const T&, удовлетворяют std::is_move_constructible.

Конструктор переноса обычно является noexcept, иначе он будет бесполезен в любом коде, который выдвигает строгие требования насчёт исключений.

Во многих реализациях is_nothrow_move_constructible также проверяет вызывает ли деструктор исключения или нет, так как эффективно вызвать noexept(T(arg)). Такое же применимо и для is_trivially_move_constructible, которое в этих реализациях также требует, чтобы деструктор был тривиальным: GCC bug 51452 LWG issue 2116.

[править] Пример

#include <iostream>
#include <type_traits>
 
struct Ex1 {
    std::string str; // Член имеет нетривиальный, но не вызывающий исключений
                     // конструктор переноса
};
struct Ex2 {
    int n;
    Ex2(Ex2&&) = default; // Тривиальный и не вызывающий исключений
                          // конструктор переноса
};
struct NoMove {
    // Исключает возможность неявного определения конструктора переноса.
    // Тем не менее, класс до сих пор перемещаемый, так как
    // его конструктор копирования может выполниться с правостороннем аргументом.
    NoMove(const NoMove&) {}
};
 
int main() {
    std::cout << std::boolalpha << "Ex1 имеет семантику переноса? "
              << std::is_move_constructible<Ex1>::value << '\n'
              << "Ex1 имеет тривиальную семантику переноса? "
              << std::is_trivially_move_constructible<Ex1>::value << '\n'
              << "Ex1 имеет не вызывающую исключения семантику переноса? "
              << std::is_nothrow_move_constructible<Ex1>::value << '\n'
              << "Ex2 имеет тривиальную семантику переноса? "
              << std::is_trivially_move_constructible<Ex2>::value << '\n'
              << "Ex2 имеет не вызывающую исключения семантику переноса? "
              << std::is_nothrow_move_constructible<Ex2>::value << '\n';
 
    std::cout << std::boolalpha
              << "NoMove имеет семантику переноса? "
              << std::is_move_constructible<NoMove>::value << '\n'
              << "NoMove имеет не вызывающую исключения семантику переноса? "
              << std::is_nothrow_move_constructible<NoMove>::value << '\n';
}

Вывод:

Ex1 имеет семантику переноса? true
Ex1 имеет тривиальную семантику переноса? false
Ex1 имеет не вызывающую исключения семантику переноса? true
Ex2 имеет тривиальную семантику переноса? true
Ex2 имеет не вызывающую исключения семантику переноса? true
NoMove имеет семантику переноса? true
NoMove имеет не вызывающую исключения семантику переноса? false

[править] См. также

Проверяет имеет ли тип конструктор для конкретных аргументов или нет
(шаблон класса) [править]
Проверяет имеет ли тип конструктор по умолчанию или нет
(шаблон класса) [править]
Проверяет имеет ли тип конструктор копирования или нет
(шаблон класса) [править]
получает RValue ссылку, если движение конструктор не бросают
Оригинал:
obtains an rvalue reference if the move constructor does not throw
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции) [править]
Шаблонная переменная, являющая псевдонимом для std::is_move_constructible::value
(шаблонная переменная) [править]
Шаблонная переменная, являющая псевдонимом для std::is_trivially_move_constructible::value
(шаблонная переменная) [править]
Шаблонная переменная, являющая псевдонимом для std::is_nothrow_move_constructible::value
(шаблонная переменная) [править]