Heim Backend-Entwicklung C++ Was bestimmt, ob ein C 11-Template-Ersetzungsfehler ein harter oder weicher Fehler ist?

Was bestimmt, ob ein C 11-Template-Ersetzungsfehler ein harter oder weicher Fehler ist?

Dec 18, 2024 pm 07:03 PM

What Determines Whether a C  11 Template Substitution Error Is a Hard or Soft Error?

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 schlägt fehl, weil Zeiger auf Referenzen nicht zulässig sind.
  • 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!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Mar 03, 2025 pm 05:52 PM

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

GULC: C -Bibliothek von Grund auf neu gebaut GULC: C -Bibliothek von Grund auf neu gebaut Mar 03, 2025 pm 05:46 PM

GULC: C -Bibliothek von Grund auf neu gebaut

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte Mar 03, 2025 pm 05:53 PM

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Mar 03, 2025 pm 05:53 PM

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

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Mar 03, 2025 pm 05:51 PM

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

eindeutiger Gebrauch und Phrasenfreigabe eindeutiger Gebrauch und Phrasenfreigabe Mar 03, 2025 pm 05:51 PM

eindeutiger Gebrauch und Phrasenfreigabe

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Mar 12, 2025 pm 04:52 PM

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

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Mar 12, 2025 pm 04:50 PM

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

See all articles