Warum „= default“ in C 11-Standardkonstruktoren verwenden?
Die traditionelle Standardkonstruktorsyntax in C umfasste einfach die Definition einer leeren Konstruktorfunktion:
S() {}
Nach dem Login kopieren
Mit C 11 wurde jedoch die „= default“-Syntax eingeführt, die mehrere bereitstellt Vorteile:
-
Explizite Abgrenzung der ODR-Verwendung: Ein explizit standardmäßiger Standardkonstruktor wird vom Standard ausdrücklich als identisch mit einem benutzerdefinierten Standardkonstruktor ohne Initialisierungsliste und einem definiert leere zusammengesetzte Anweisung. Dies stellt ein konsistentes Verhalten über verschiedene Anwendungsfälle hinweg sicher.
-
Aggregat- und Trivialtypeigenschaften: Während ein herkömmlicher leerer Konstruktor Aggregat- und Trivialtypeigenschaften beibehält, ist dies bei einem deklarierten Standardkonstruktor, selbst einem leeren, der Fall nicht. Durch die Verwendung von „= default“ werden diese Eigenschaften bei Bedarf explizit entfernt.
#include <type_traits>
struct X {
X() = default;
};
struct Y {
Y() {}
};
int main() {
static_assert(std::is_trivial<X>::value, "X should be trivial");
static_assert(std::is_pod<X>::value, "X should be POD");
static_assert(!std::is_trivial<Y>::value, "Y should not be trivial");
static_assert(!std::is_pod<Y>::value, "Y should not be POD");
}
Nach dem Login kopieren
-
Übereinstimmende Eigenschaften des impliziten Konstruktors: Die „= default“-Syntax stellt sicher, dass die explizit definiert sind Der Standardkonstruktor stimmt mit den Eigenschaften des impliziten Konstruktors überein, einschließlich constexpr- und Ausnahmespezifikationen. Dies verbessert die Lesbarkeit des Codes.
-
Einheitliche Syntax: Die „= default“-Syntax bietet eine einheitliche Methode zum Definieren spezieller Mitgliedsfunktionen wie Kopier-/Verschiebekonstruktoren und Destruktoren, wodurch der Code konsistenter und einfacher zu erstellen ist verstehen.
Das obige ist der detaillierte Inhalt vonWarum „= default' für Standardkonstruktoren in C 11 verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!