Heim  >  Artikel  >  Backend-Entwicklung  >  Können Standardcontainervorlagen mit unvollständigen Typen instanziiert werden?

Können Standardcontainervorlagen mit unvollständigen Typen instanziiert werden?

Barbara Streisand
Barbara StreisandOriginal
2024-11-04 14:59:40937Durchsuche

Can Standard Container Templates be Instantiated with Incomplete Types?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn