Heim  >  Artikel  >  Backend-Entwicklung  >  Warum können Vorlagentypparameter nicht aus Standardfunktionsargumenten in C abgeleitet werden?

Warum können Vorlagentypparameter nicht aus Standardfunktionsargumenten in C abgeleitet werden?

Linda Hamilton
Linda HamiltonOriginal
2024-11-05 00:24:02604Durchsuche

Why Can't Template Type Parameters Be Deduced from Default Function Arguments in C  ?

Warum Vorlagentypparameter nicht von Standardfunktionsargumenten abgeleitet werden können

In C besteht ein häufiges Missverständnis darin, dass der Compiler Vorlagentypparameter ableiten kann aus Standardfunktionsargumenten. Dies ist jedoch nicht der Fall.

Wenn der folgende Code auftritt:

<code class="cpp">struct foo {
  template <typename T>
  void bar(int a, T b = 0.0f) {
  }
};

int main() {
  foo a;
  a.bar(5);  // Error: could not deduce template argument for T
}</code>

Der Compiler kann den Typ T nicht aus dem Standardargument 0.0f ableiten. Stattdessen ist eine explizite Spezifikation erforderlich, wie in a.bar(5).

C 03-Verbot

In C 03 verbietet die Sprachspezifikation ausdrücklich die Verwendung Standardfunktionsargumente für den Abzug von Vorlagenargumenten (C 03 §14.8.2/17):

A template type-parameter cannot be deduced from the type of a function default argument.

C 11 Standardvorlagenargumente

In C 11 eine Problemumgehung entstand: Einführung von Standardvorlagenargumenten. Durch Ändern des Codes wie folgt:

<code class="cpp">template <typename T = float>
void bar(int a, T b = 0.0f) { }</code>

Der Standardvorlagenparameter T wird bereitgestellt. Es ist jedoch zu beachten, dass das Vorhandensein eines Standardvorlagenarguments die Einschränkung auf Standardfunktionsargumente nicht aufhebt.

Gemäß C 11 14.8.2.5/5 werden Standardfunktionsargumente in als „nicht abgeleitete Kontexte“ betrachtet der Prozess zur Ableitung von Vorlagenargumenten. Dies bedeutet, dass der Compiler den Standardwert aus dem Funktionsargument nicht verwenden kann, um auf den Vorlagentypparameter zu schließen.

Fazit

Während Standardfunktionsargumente Komfort bieten, sind Vorlagentypparameter hilfreich sollte daraus nicht abgeleitet werden. Für Fälle, in denen Standardwerte erforderlich sind, bieten Standardvorlagenargumente eine tragbarere und flexiblere Lösung.

Das obige ist der detaillierte Inhalt vonWarum können Vorlagentypparameter nicht aus Standardfunktionsargumenten in C abgeleitet werden?. 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