Standard-Container-Vorlagen und unvollständige Typen
Es stellt sich die Frage, ob Standard-Container-Vorlagen mit unvollständigen Typen instanziiert werden können. Während bestimmte Containerkonstruktionen in der Praxis scheinbar funktionieren, verbietet der C 11-Standard dies ausdrücklich unter §17.6.4.8 [lib.res.on.functions].
Der Standard besagt: „… wenn ein unvollständiger Typ (3.9) wird beim Instanziieren einer Vorlagenkomponente als Vorlagenargument verwendet, sofern dies nicht ausdrücklich für diese Komponente zulässig ist.“ Diese Einschränkung gilt für Mitgliedsfunktionen, Mitgliedsklassendefinitionen und Signaturen, jedoch nicht für Operationen innerhalb des Blockbereichs.
Die Standardbibliotheksimplementierung kann keine Vorlageninstanziierungen induzieren, die für unvollständige Typen fehlschlagen würden, selbst wenn andere speziell erforderliche Instanziierungen erfolgreich sind . Dieses Verbot soll potenzielle Probleme verhindern, wie z. B. selbstreferenzielle Typen, die aus Optimierungen wie „kleinen Vektoren“ entstehen.
Es gibt Ausnahmen, wie z. B. die Klassenvorlage std::unique_ptr, die unvollständige Typargumente explizit unterstützt. sogar innerhalb des Blockbereichs. Für Standardcontainer bleibt jedoch die Beschränkung der Verwendung unvollständiger Typen bestehen, um ein konsistentes Verhalten über alle Implementierungen hinweg sicherzustellen.
Das obige ist der detaillierte Inhalt vonKönnen Standardcontainervorlagen mit unvollständigen Typen instanziiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!