Heim >Backend-Entwicklung >C++ >Was stellt den „unmittelbaren Kontext' in C 11 SFINAE dar?

Was stellt den „unmittelbaren Kontext' in C 11 SFINAE dar?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-10 18:12:11799Durchsuche

What Constitutes the

Was genau ist der „unmittelbare Kontext“ in C 11 SFINAE?

Das Konzept des „unmittelbaren Kontexts“ ist in der Substitution von C 11 von entscheidender Bedeutung Failure Is Not an Error (SFINAE)-Redewendung. Gemäß dem C 11-Standard können nur ungültige Typen und Ausdrücke „im unmittelbaren Kontext“ des Funktionstyps und seiner Vorlagenparametertypen zu einem Abzugsfehler führen.

Erstes Verständnis

Der Standard gibt in einem Hinweis einen begrenzten Hinweis: „Die Auswertung ersetzter Typen und Ausdrücke kann zu Nebenwirkungen wie Spezialisierungen von Klassenvorlagen, Spezialisierungen von Funktionsvorlagen usw. führen. implizite Funktionsgenerierung usw. Diese Nebenwirkungen werden nicht als Teil des „unmittelbaren Kontexts“ betrachtet.

Entscheidungsverfahren

Um festzustellen, ob ein Substitutionsfehler im „unmittelbaren Kontext“ auftritt, gehen Sie wie folgt vor Vorgehensweise:

  1. Erforderliche Vorlagen und Funktionen identifizieren:Berücksichtigen Sie alle Vorlagen und implizit definierte Funktionen, die für die Argumentsubstitution erforderlich sind.
  2. Schritt vor der Instanziierung: Stellen Sie sich vor, diese Vorlagen und Funktionen vor der Substitution zu generieren.
  3. Direkte Fehler: Wenn während dieses Vorinstanziierungsschritts Fehler auftreten, befinden sie sich nicht im unmittelbaren Kontext und führen zu einer harten Kompilierung Fehler.
  4. Abzugsfehler:Wenn die Vorinstanziierung erfolgreich ist, sind alle nachfolgenden Fehler während der Ersetzung keine Fehler, sondern führen zu Abzugsfehlern.

Konkret Beispiele

  • Beispiel 1 (Schwer Fehler):
template<typename T>
void func(typename T::type* arg);
func<A<int&>&>(nullptr); // T::type* is invalid, causing a hard error.
  • Beispiel 2 (Abzugsfehler):
template<typename T>
void func(typename T::type* arg);
template<>
struct A<char> {};
func<A<char>>(nullptr); // T::type* is not defined, leading to a deduction failure.

Fazit

Das „unmittelbarer Kontext“ bezieht sich auf Ausdrücke und Typen, die aufgelöst werden können, ohne dass über den erforderlichen Vorinstanziierungsschritt hinaus eine zusätzliche Vorlagen- oder Funktionsgenerierung erforderlich ist. Fehler, die in dieser Phase vor der Instanziierung auftreten, führen zu harten Kompilierungsfehlern, während Fehler in der nachfolgenden Substitutionsphase zu Abzugsfehlern führen.

Das obige ist der detaillierte Inhalt vonWas stellt den „unmittelbaren Kontext' in C 11 SFINAE dar?. 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