Namensräume
Varianten
Aktionen

std::is_default_constructible, std::is_trivially_default_constructible, std::is_nothrow_default_constructible

Von cppreference.com
< cpp‎ | types
 
 
Metaprogrammierungsbibliothek
Typmerkmale
Typkategorien
(C++11)
(C++11)(DR*)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11) 
(C++11)
(C++11)
Typeneigenschaften
(C++11)
(C++11)
(C++14)
(C++11)(deprecated in C++26)
(C++11)(bis C++20*)
(C++11)(veraltet in C++20)
(C++11)
Typmerkmalskonstanten
Metafunktionen
(C++17)
Unterstützte Operationen
is_default_constructibleis_trivially_default_constructibleis_nothrow_default_constructible
(C++11)(C++11)(C++11)
Beziehungen und Eigenschaftsabfragen
Typmodifikationen
(C++11)(C++11)(C++11)
Typentransformationen
(C++11)(veraltet in C++23)
(C++11)(veraltet in C++23)
(C++11)
(C++11)(bis C++20*)(C++17)

(C++11)
(C++11)
(C++17)
Rationale Arithmetik zur Compilezeit
Ganzzahlsequenzen zur Compilezeit
 
Definiert in der Kopfdatei <type_traits>
template< class T >
struct is_default_constructible;
(1) (seit C++11)
template< class T >
struct is_trivially_default_constructible;
(2) (seit C++11)
template< class T >
struct is_nothrow_default_constructible;
(3) (seit C++11)
1) Stellt die Mitgliedskonstante value bereit, die gleich std::is_constructible<T>::value ist.
2) Stellt die Mitgliedskonstante value bereit, die gleich std::is_trivially_constructible<T>::value ist.
3) Stellt die Mitgliedskonstante value bereit, die gleich std::is_nothrow_constructible<T>::value ist.

Wenn T kein vollständiger Typ ist, (möglicherweise cv-qualifiziert) void oder ein Array unbekannter Größe, ist das Verhalten undefiniert.

Wenn eine Instanziierung einer Vorlage davon direkt oder indirekt von einem unvollständigen Typ abhängt und diese Instanziierung ein anderes Ergebnis liefern könnte, wenn dieser Typ hypothetisch vervollständigt würde, ist das Verhalten undefiniert.

Wenn das Programm Spezialisierungen für eine der auf dieser Seite beschriebenen Vorlagen hinzufügt, ist das Verhalten undefiniert.

Inhalt

[bearbeiten] Hilfsvariablenschablonen

template< class T >

inline constexpr bool is_default_constructible_v =

    is_default_constructible<T>::value;
(seit C++17)
template< class T >

inline constexpr bool is_trivially_default_constructible_v =

    is_trivially_default_constructible<T>::value;
(seit C++17)
template< class T >

inline constexpr bool is_nothrow_default_constructible_v =

    is_nothrow_default_constructible<T>::value;
(seit C++17)

Abgeleitet von std::integral_constant

Member-Konstanten

value
[static]
true, wenn T standardkonstruierbar ist, false andernfalls
(öffentliche statische Member-Konstante)

Memberfunktionen

operator bool
konvertiert das Objekt zu bool, gibt value zurück
(öffentliche Memberfunktion)
operator()
(C++14)
gibt value zurück
(öffentliche Memberfunktion)

Membertypen

Typ Definition
value_type bool
type std::integral_constant<bool, value>

[bearbeiten] Mögliche Implementierung

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> {};

[bearbeiten] Hinweise

In vielen Implementierungen prüft std::is_nothrow_default_constructible auch, ob der Destruktor wirft, da er effektiv noexcept(T()) ist. Dasselbe gilt für std::is_trivially_default_constructible, was in diesen Implementierungen auch erfordert, dass der Destruktor trivial ist: GCC-Bug 51452, LWG-Problem 2116.

std::is_default_constructible<T> testet nicht, ob T x; kompilieren würde; es versucht direkte Initialisierung mit einer leeren Argumentliste (siehe std::is_constructible). Daher sind std::is_default_constructible_v<const int> und std::is_default_constructible_v<const int[10]> true.

[bearbeiten] Beispiel

#include <string>
#include <type_traits>
 
struct S1
{
    std::string str; // member has a non-trivial default constructor
};
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; // trivial and non-throwing
};
static_assert(std::is_trivially_default_constructible_v<S2> == true);
static_assert(std::is_nothrow_default_constructible_v<S2> == true);
 
int main() {}

[bearbeiten] Siehe auch

prüft, ob ein Typ einen Konstruktor für spezifische Argumente hat
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ einen Kopierkonstruktor hat
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ aus einer rvalue-Referenz konstruiert werden kann
(Klassenvorlage) [bearbeiten]
gibt an, dass ein Objekt eines Typs standardkonstruiert werden kann
(Konzept) [bearbeiten]