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