Unvollständige Typinstanziierung in Standardcontainern
In C ermöglichen Container wie std::vector und std::map die Instanziierung von Containern mit unvollständige Typen. Diese Praxis wurde häufig verwendet, um rekursive Strukturen durch selbstreferenzielle Typen zu erstellen. Allerdings wirft der C-Standard die Frage auf, ob solche Instanziierungen zulässig sind.
Gemäß §17.6.4.8 des C 11-Standards können unvollständige Typinstanziierungen zu undefiniertem Verhalten führen, wenn sie nicht explizit erlaubt sind. Einige Container, wie z. B. std::vector, funktionieren ordnungsgemäß mit unvollständigen Typen, da sie keine value_type-Mitglieder oder Funktionen besitzen, die mit value_type-Objekten nach Wert interagieren. Allerdings zeigt std::map in dieser Hinsicht problematisches Verhalten.
Die Absicht des Standards besteht darin, unvollständige Typinstanziierungen zu verhindern, auch wenn bei bestimmten Implementierungen möglicherweise keine Probleme auftreten. Dies ist in erster Linie auf mögliche Implementierungsschwierigkeiten zurückzuführen, wie z. B. die Optimierung von std::vector für eine feste Anzahl von Elementen, die fehlschlagen könnte, wenn rekursive Strukturen zulässig wären.
Folglich schreibt der Standard die Verwendung vollständiger Typen für Container vor Instanziierung. Es wird jedoch die Möglichkeit anerkannt, benutzerdefinierte Klassenvorlagen zu erstellen, die unvollständige Typen explizit unterstützen, wie beispielsweise std::unique_ptr.
Aus diesem Grund sollten Standardcontainer nicht mit unvollständigen Typen instanziiert werden, obwohl dies zulässig ist Entwickeln Sie benutzerdefinierte Klassenvorlagen, die dieser Verwendung Rechnung tragen.
Das obige ist der detaillierte Inhalt vonKönnen unvollständige Typen in Standardcontainern instanziiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!