Heim >Backend-Entwicklung >C++ >Sind unvollständige Typen legitime Argumente für die Instanziierung von Standardcontainern?
Können unvollständige Typen Standardcontainer verbessern?
Auf der Suche nach rekursiven Datenstrukturen greifen Entwickler häufig auf die Instanziierung von Standardcontainern mit unvollständigen Typen zurück. Die Rechtmäßigkeit solcher Konstrukte wurde jedoch aufgrund der begrenzten Anleitung des Standards zur Verwendung unvollständiger Vorlagenargumente diskutiert.
Die Bedenken ergeben sich aus einer Passage in §17.6.4.8 [lib.res.on.functions], wo Der Standard verbietet unvollständige Typen als Vorlagenargumente beim Instanziieren von Vorlagenkomponenten, es sei denn, dies ist für diese Komponente ausdrücklich zulässig. Dies wirft Fragen zur Gültigkeit von Konstrukten auf wie:
<code class="cpp">struct multi_tree_node { std::vector< multi_tree_node & > child; };</code>
Während solche Konstrukte in der Praxis oft nahtlos funktionieren, hat das Schweigen des Standards zur unvollständigen Typinstanziierung Zweifel an ihrer Rechtmäßigkeit aufkommen lassen.
Allerdings Eine weitere Prüfung zeigt, dass die Beschränkung des Standards auf unvollständige Typen in erster Linie für „Operationen an Typen …“ gilt, die sich im Kontext von §17.6.4.8 auf Funktionen beziehen. Da die Instanziierung eines Containers nicht die Ausführung von Funktionen innerhalb seiner Memberdefinitionen beinhaltet, verstößt die Instanziierung selbst möglicherweise nicht gegen das Verbot des Standards.
Diese Interpretation wird durch die Existenz von std::unique_ptr unterstützt, das unvollständige Typargumente explizit zulässt auch im Blockbereich. Darüber hinaus ist die Begründung des Standards für das Verbot unvollständiger Typinstanziierung, da sie sich auf die effiziente Implementierung von Optimierungstechniken wie „Small Vector“ bezieht, nicht auf die Containerinstanziierung anwendbar.
Daher rät der Standard von der Verwendung unvollständiger Typen ab Argumente beim Instanziieren von Vorlagenkomponenten, bleibt die Rechtmäßigkeit der Instanziierung von Standardcontainern mit unvollständigen Typen unklar. Bis zur weiteren Klärung durch den Standard ist jedoch Vorsicht bei solchen Konstrukten geboten.
Das obige ist der detaillierte Inhalt vonSind unvollständige Typen legitime Argumente für die Instanziierung von Standardcontainern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!