Heim > Backend-Entwicklung > C++ > Können lokale Klassen endlich als Prädikate für STL-Algorithmen in C 11 verwendet werden?

Können lokale Klassen endlich als Prädikate für STL-Algorithmen in C 11 verwendet werden?

Mary-Kate Olsen
Freigeben: 2024-11-21 05:04:39
Original
642 Leute haben es durchsucht

Can Local Classes Finally Be Used as Predicates for STL Algorithms in C  11?

Lokale Klassen mit STL-Algorithmen verwenden: Die lokale Typbeschränkung aufdecken

Im Bereich der C-Programmierung sind lokale Klassen seit langem verboten Prädikate für STL-Algorithmen, was Fragen zur zugrunde liegenden Einschränkung und ihrer Begründung aufwirft.

Der C 98/03-Standard verbietet ausdrücklich lokale Typen als Vorlagenargumente, einschließlich lokaler Klassen. Artikel 14.3.1 des Standards besagt eindeutig, dass „lokale Typen [...] nicht als Vorlagenargument für einen Vorlagentypparameter verwendet werden dürfen.“

Der Grund für diese Einschränkung liegt in der Vergänglichkeit Natur lokaler Typen. Da sie in einem begrenzten Umfang existieren, kann ihre Zerstörung unerwartet erfolgen, was möglicherweise zu undefiniertem Verhalten führt, wenn sie als Prädikate für STL-Algorithmen verwendet werden.

Mit der Einführung von C 11 wurde diese Einschränkung jedoch aufgehoben. Der überarbeitete Standard ermöglicht die Verwendung lokaler Typen als Vorlagenargumente, sodass lokale Klassen als Prädikate für STL-Algorithmen dienen können.

Bedenken Sie beispielsweise den folgenden Codeausschnitt:

#include <algorithm>
#include <vector>

int main() {
    int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    std::vector<int> v(array, array + 10);

    struct even {
        bool operator()(int x) { return !(x % 2); }
    };
    std::remove_if(v.begin(), v.end(), even());
}
Nach dem Login kopieren

In Mit diesem Code definiert die lokale Klasse sogar ein Prädikat, das nach geraden Zahlen prüft. Diese Klasse kann jetzt direkt als Argument für den std::remove_if-Algorithmus verwendet werden, der alle geraden Zahlen aus dem Vektor v entfernt.

Während die Beschränkung auf lokale Typen ursprünglich dazu gedacht war, vor potenziell undefiniertem Verhalten zu schützen, Seine Entfernung in C 11 hat neue Möglichkeiten für die Verwendung lokaler Klassen in funktionalen Programmierszenarien eröffnet.

Das obige ist der detaillierte Inhalt vonKönnen lokale Klassen endlich als Prädikate für STL-Algorithmen in C 11 verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage