template <class T>
struct has_trivial_copy : public true_type-or-false_type
{};
template <class T>
struct has_trivial_copy_constructor : public true_type-or-false_type
{};
Наследники:Если T является (возможно, cv-квалифицированным) типом с тривиальным копи-конструктором, то наследуется отtrue_type, в противном случае наследуется отtrue_type.Фальшивый_тип.
Эти две черты являются синонимами друг для друга.
Если тип имеет тривиальный копи-конструктор, то конструктор имеет тот же эффект, что и копирование битов одного объекта на другой: вызовы конструктору можно безопасно заменить вызовомmemcpy
.
Совместимость компилятора:Без некоторой (пока еще не указанной) помощи от компилятора, have_trivial_copy никогда не сообщит, что класс или структура, определяемая пользователем, имеет тривиальный конструктор; это всегда безопасно, если возможно, неоптимально. Кроме того, для того, чтобы правильно обращаться с удаленными или частными копи-конструкторами, требуется детип C++11
. В настоящее время (май 2015 года) компиляторы более поздние, чем Visual C++ 8, GCC-4.3, Greenhills 6.0, Intel-11.0 и Codegear, имеют необходимый компиляторвстроенных элементовдля обеспечения того, чтобы эта черта «просто работала». Вы также можете проверить, доступны ли необходимыевнутренности, проверив, определен ли макросBOOST_HAS_TRIVIAL_COPY
.
C++ Стандартная ссылка:12.8p6.
Заголовок:#include<boost/type_traits/has_trivial_copy.hpp>
или#include<boosttype_traits.hpp>
Примеры:
имеет_trivial_copy<int>
наследует отtrue_type
.
имеет_trivial_copy<char*>::type
является типомtrue_type
.
имеет_trivial_copy<int[*]долго] >::значение
является интегральным постоянным выражением, которое оценивает доистинно.
имеет_trivial_copy<MyClass>::значение
является интегральным постоянным выражением, которое оценивает доложное.
имеет_trivial_copy<T>::значение_type
является типомbool
.