Heim >Backend-Entwicklung >C++ >Warum können lokale Klassen nicht als Prädikate in STL-Algorithmen verwendet werden (C 98/03)?

Warum können lokale Klassen nicht als Prädikate in STL-Algorithmen verwendet werden (C 98/03)?

DDD
DDDOriginal
2024-11-22 10:16:10724Durchsuche

Why Can't Local Classes Be Used as Predicates in STL Algorithms (C  98/03)?

Das Rätsel lokaler Klassen in STL-Algorithmen

Obwohl Lambda-Ausdrücke häufig als Prädikate in STL-Algorithmen verwendet werden, scheinen lokale Klassen ein rätselhaftes Geheimnis zu sein von diesem Dienstprogramm ausgeschlossen. In dieser Frage versuchen wir, die vom Standard vorgeschriebene Einschränkung aufzudecken, die es lokalen Typen verbietet, als Prädikate an STL-Algorithmen teilzunehmen.

Das Verbot des Standards

Das Fehlen von local Klassen als Prädikattypen in STL-Algorithmen ergeben sich aus einem ausdrücklichen Verbot des Standards C 98/03, wie im Artikel C 03 erwähnt 14.3.1:

„Ein lokaler Typ, ein Typ ohne Verknüpfung, ein unbenannter Typ oder ein aus einem dieser Typen zusammengesetzter Typ darf nicht als Vorlagenargument für einen Vorlagentypparameter verwendet werden.“

Diese Einschränkung manifestiert sich darin, dass Compiler Code wie im bereitgestellten Beispiel markieren, bei dem die lokale Struktur nicht einmal als Prädikat verwendet werden kann std::remove_if.

Begründung für die Einschränkung

Die Begründung für diesen Ausschluss ist in Vermutungen verborgen. Einige spekulieren, dass es sich um ein Versehen handelte, während andere glauben, dass es dazu gedacht war, Ad-hoc- und möglicherweise verwirrende Typdefinitionen innerhalb von Algorithmen zu verhindern.

Entwicklung in C 11

Glücklicherweise Der C 11-Standard hat dieses Problem behoben und die Beschränkung auf lokale Typen als Vorlagenargumente aufgehoben. Folglich gestatten moderne Compiler im Allgemeinen die Verwendung lokaler Klassen als Prädikate in STL-Algorithmen.

Fazit

Während das ursprüngliche Verbot lokaler Klassen eine Quelle der Frustration war, ist es so Die Entfernung in C 11 hat neue Möglichkeiten für die Verwendung lokaler Typen in STL-Algorithmen eröffnet. Heutzutage existieren Lambda-Ausdrücke und lokale Klassen als effektive Prädikatoptionen nebeneinander und bieten Entwicklern vielseitige Werkzeuge zur Algorithmusmanipulation.

Das obige ist der detaillierte Inhalt vonWarum können lokale Klassen nicht als Prädikate in STL-Algorithmen verwendet werden (C 98/03)?. 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