


Was bestimmt, ob ein C 11-Template-Ersetzungsfehler ein harter oder weicher Fehler ist?
Unmittelbarer Kontext bei der C 11-Vorlagensubstitution
Der C 11-Standard führt Substitution Failure Is Not An Error (SFINAE) ein, das dies ermöglicht Unterdrückung harter Kompilierungsfehler während der Ersetzung von Vorlagenargumenten. Der Standard definiert jedoch einen spezifischen „unmittelbaren Kontext“, für den SFINAE gilt, was eine gewisse Unsicherheit darüber lässt, wann ein Substitutionsfehler zu einem harten oder weichen Fehler führt.
Unmittelbare Kontextdefinition
Der Standard definiert den unmittelbaren Kontext als:
"Nur ungültige Typen und Ausdrücke im unmittelbaren Kontext des Funktionstyps und seiner Vorlagenparametertypen können zu einem Abzugsfehler führen ... Solche Nebenwirkungen stehen nicht im „unmittelbaren Kontext“ und können dazu führen, dass das Programm fehlerhaft ist.“Entscheidung Verfahren
Um festzustellen, ob ein Ersetzungsfehler im unmittelbaren Kontext auftritt, berücksichtigen Sie das folgende Entscheidungsverfahren:
Schritt 1:
Identifizieren Sie alle Vorlagen und implizit definierte Funktionen, die erforderlich sind, um das Ergebnis der Substitution zu bestimmen.- Schritt 2: Stellen Sie sich vor Diese Entitäten werden generiert, bevor die Substitution beginnt.
- Schritt 3: Wenn während dieser hypothetischen Generierung Fehler auftreten, stehen sie nicht im unmittelbaren Kontext und führen zu harten Fehlern.
- Schritt 4: Wenn alle Entitäten fehlerfrei generiert werden, sind alle nachfolgenden Fehler während der Ersetzung keine Fehler, sondern führen zu einem Argumentabzug Fehler.
- Beispiele
Schwerer Fehler:
func> - Instanziierung von A-
Fehler beim Argumentabzug: func> - Instanziierung von A
Erfolgreich, aber A ::type existiert nicht. - Fehler bei der Argumentableitung: class B { void f(int); }; func::f – Die implizite Definition von f ergibt eine gelöschte Mitgliedsfunktion.
- Fazit
Durch das Verständnis des Konzepts des unmittelbaren Kontexts und die Verwendung der Mithilfe des oben beschriebenen Entscheidungsverfahrens können Programmierer besser vorhersagen, wann Substitutionsfehler zu harten oder weichen Fehlern führen, was eine effektivere Nutzung von SFINAE in C 11 ermöglicht Vorlagen.
Das obige ist der detaillierte Inhalt vonWas bestimmt, ob ein C 11-Template-Ersetzungsfehler ein harter oder weicher Fehler ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

GULC: C -Bibliothek von Grund auf neu gebaut

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

eindeutiger Gebrauch und Phrasenfreigabe

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?
