std:: is_default_constructible, std:: is_trivially_default_constructible, std:: is_nothrow_default_constructible
|
Определено в заголовочном файле
<type_traits>
|
||
|
template
<
class
T
>
struct is_default_constructible ; |
(1) | (начиная с C++11) |
|
template
<
class
T
>
struct is_trivially_default_constructible ; |
(2) | (начиная с C++11) |
|
template
<
class
T
>
struct is_nothrow_default_constructible ; |
(3) | (начиная с C++11) |
Если
T
не является полным типом, (возможно, с cv-квалификаторами)
void
, или массивом неизвестной границы, поведение не определено.
Если создание экземпляра шаблона выше зависит, прямо или косвенно, от неполного типа, и это создание экземпляра может дать другой результат, если бы этот тип был гипотетически завершен, поведение не определено.
Если программа добавляет специализации для любых шаблонов, описанных на этой странице, поведение не определено.
Содержание |
Вспомогательные шаблоны переменных
|
template
<
class
T
>
inline
constexpr
bool
is_default_constructible_v
=
|
(начиная с C++17) | |
|
template
<
class
T
>
inline
constexpr
bool
is_trivially_default_constructible_v
=
|
(начиная с C++17) | |
|
template
<
class
T
>
inline
constexpr
bool
is_nothrow_default_constructible_v
=
|
(начиная с C++17) | |
Унаследовано от std:: integral_constant
Константы-члены
|
value
[static]
|
true
если
T
является конструируемым по умолчанию,
false
в противном случае
(публичная статическая константа-член) |
Функции-члены
|
operator bool
|
преобразует объект в
bool
, возвращает
value
(публичная функция-член) |
|
operator()
(C++14)
|
возвращает
value
(публичная функция-член) |
Типы-члены
| Тип | Определение |
value_type
|
bool |
type
|
std:: integral_constant < bool , value > |
Возможная реализация
template<class T> struct is_default_constructible : std::is_constructible<T> {}; template<class T> struct is_trivially_default_constructible : std::is_trivially_constructible<T> {}; template<class T> struct is_nothrow_default_constructible : std::is_nothrow_constructible<T> {}; |
` был сохранен без изменений, как и требовалось. HTML-теги и атрибуты также остались нетронутыми. Поскольку в предоставленном фрагменте не было текста вне тегов ``, `` или `
Примечания
Во многих реализациях
std::is_nothrow_default_constructible
также проверяет, выбрасывает ли деструктор исключения, поскольку это фактически
noexcept
(
T
(
)
)
. То же относится и к
std::is_trivially_default_constructible
, который в этих реализациях также требует, чтобы деструктор был тривиальным:
GCC bug 51452
,
LWG issue 2116
.
std :: is_default_constructible < T > не проверяет, что T x ; скомпилируется; он выполняет прямую инициализацию с пустым списком аргументов (см. std::is_constructible ). Поэтому std :: is_default_constructible_v < const int > и std :: is_default_constructible_v < const int [ 10 ] > имеют значение true .
Пример
#include <string> #include <type_traits> struct S1 { std::string str; // член имеет нетривиальный конструктор по умолчанию }; static_assert(std::is_default_constructible_v<S1> == true); static_assert(std::is_trivially_default_constructible_v<S1> == false); struct S2 { int n; S2() = default; // тривиальный и не выбрасывающий исключения }; static_assert(std::is_trivially_default_constructible_v<S2> == true); static_assert(std::is_nothrow_default_constructible_v<S2> == true); int main() {}
Смотрите также
|
(C++11)
(C++11)
(C++11)
|
проверяет, имеет ли тип конструктор для определенных аргументов
(шаблон класса) |
|
(C++11)
(C++11)
(C++11)
|
проверяет, имеет ли тип конструктор копирования
(шаблон класса) |
|
(C++11)
(C++11)
(C++11)
|
проверяет, может ли тип быть сконструирован из rvalue-ссылки
(шаблон класса) |
|
(C++20)
|
указывает, что объект типа может быть сконструирован по умолчанию
(концепт) |