Die Begründung für das Verbot unvollständiger Typen durch C-Container
In der Welt der C-Programmierung sind Container wesentliche Datenstrukturen zum Organisieren und Bearbeiten von Daten. Ein besonderes Merkmal von C-Containern ist jedoch ihre Abneigung gegen unvollständige Typen. Warum ist das so?
Die Antwort liegt in der historischen Entwicklung von C . In der Anfangszeit hatten die Implementierungen der Standard Template Library (STL) Schwierigkeiten, Container mit unvollständigen Typen zu verarbeiten. Um Stabilität und Abwärtskompatibilität zu gewährleisten, hat das Standardisierungskomitee beschlossen, solche Container im C-Standard vollständig zu verbieten.
Diese Einschränkung war besonders wirksam bei der Verhinderung rekursiver Datenstrukturen. Dadurch wurde auch sichergestellt, dass bestehende STL-Implementierungen weiterhin wie vorgesehen funktionieren konnten, ohne dass es zu unvorhergesehenen Problemen kam.
Das Verbot unvollständiger Typen hat jedoch auch einige Kritik hervorgerufen. Es schränkt bestimmte erweiterte Datenstrukturimplementierungen ein und würde von einer erneuten Betrachtung in zukünftigen Revisionen des C-Standards profitieren.
Während die Standardcontainer weiterhin unvollständige Typ-Aversionen aufweisen, haben Bibliotheksdesigner wie diejenigen, die hinter boost::container stehen, dies übernommen Initiative, eigene Container zu erstellen, die diese Einschränkung nicht vorschreiben. Diese Entscheidung ermöglicht eine größere Vielseitigkeit und Flexibilität bei der C-Programmierung.
Aktualisierung:
Mit der Einführung von C 17 wurden bestimmte Container in der Standard-C-Bibliothek geändert Erlauben Sie unvollständige Typen. Dabei handelt es sich jedoch nicht um eine allgemeingültige Änderung, und das allgemeine Verbot bleibt für die meisten Behälter in der Norm bestehen.
Das obige ist der detaillierte Inhalt vonWarum verbieten C-Standardcontainer normalerweise unvollständige Typen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!