Heim > Backend-Entwicklung > C++ > Warum sind Standardvorlagenargumente in C auf Klassenvorlagen beschränkt?

Warum sind Standardvorlagenargumente in C auf Klassenvorlagen beschränkt?

Susan Sarandon
Freigeben: 2024-11-01 17:29:30
Original
560 Leute haben es durchsucht

Why are Default Template Arguments Restricted to Class Templates in C  ?

Warum Standardvorlagenargumente auf Klassenvorlagen beschränkt sind

In C sind Standardvorlagenargumente nur für Klassenvorlagen, nicht jedoch für Funktionsvorlagen zulässig. Diese Einschränkung mag überraschend erscheinen, es gibt jedoch mehrere Gründe dafür.

Standardvorlagenargumente für Klassenvorlagen

Standardvorlagenargumente ermöglichen es Klassenvorlagen, einen Standardwert für bestimmte Parameter bereitzustellen. Dies kann nützlich sein, wenn sich der Standardwert für die meisten Instanzen der Vorlage wahrscheinlich nicht ändern wird. Beispielsweise könnte eine Klassenvorlage für einen Sortieralgorithmus ein Standardvorlagenargument für die beim Sortieren verwendete Vergleichsfunktion haben.

Einschränkung für Funktionsvorlagen

Standardvorlagenargumente sind jedoch für Funktionen nicht zulässig Vorlagen, da sie zu Mehrdeutigkeiten führen würden. Betrachten Sie das folgende hypothetische Beispiel:

<code class="cpp">struct my_class {
  template<class T = int>
  void mymember(T* vec) {
    // ...
  }
};</code>
Nach dem Login kopieren

In diesem Beispiel wäre unklar, ob T der Standardtyp für die Funktion „mymember“ oder für die Vorlage „my_class“ selbst ist. Diese Mehrdeutigkeit könnte zu subtilen Fehlern im Code führen.

Aufkommen von C 11

Vor C 11 war das Verbot von Standardvorlagenargumenten für Funktionsvorlagen eine erhebliche Einschränkung. Mit C 11 wurde jedoch eine neue Funktion namens „Typ-Aliase“ eingeführt, die es uns ermöglicht, Aliase für Typen zu definieren. Dies bietet eine Problemumgehung für das Fehlen von Standardvorlagenargumenten für Funktionsvorlagen. Das obige Beispiel könnte beispielsweise wie folgt umgeschrieben werden:

<code class="cpp">struct my_class {
  typedef int default_type;
  template<class T = default_type>
  void mymember(T* vec) {
    // ...
  }
};</code>
Nach dem Login kopieren

Typaliase sind zwar nicht so praktisch wie Standardvorlagenargumente, bieten aber eine ähnliche Funktionalität und ermöglichen es uns, die Einschränkungen des aktuellen C-Standards zu überwinden .

Bjarne Stroustrups Perspektive

In einem Fehlerbericht äußerte Bjarne Stroustrup, der ursprüngliche Designer von C, seine Meinung zum Verbot von Standardvorlagenargumenten für Funktionsvorlagen:

Das Verbot von Standard-Vorlagenargumenten für Funktionsvorlagen ist ein missbräuchliches Überbleibsel aus der Zeit, in der freistehende Funktionen als Bürger zweiter Klasse behandelt wurden und verlangte, dass alle Vorlagenargumente aus den Funktionsargumenten abgeleitet und nicht spezifiziert werden mussten.

Das obige ist der detaillierte Inhalt vonWarum sind Standardvorlagenargumente in C auf Klassenvorlagen beschränkt?. 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