Heim > Backend-Entwicklung > C++ > Hauptteil

Warum kann C Vorlagenargumente nicht aus Standardfunktionsargumenten ableiten?

DDD
Freigeben: 2024-11-05 09:14:02
Original
943 Leute haben es durchsucht

Why Can't C   Deduce Template Arguments from Default Function Arguments?

Ableitung von Vorlagenargumenten aus Standardfunktionsargumenten

In C stoßen Programmierer häufig auf Szenarien, in denen sie Vorlagenargumente aus Funktionsaufrufen ableiten müssen. Es kann jedoch vorkommen, dass dieser Abzug fehlschlägt und zu Compilerfehlern führt. Ein solcher Fall ist die Unfähigkeit, Vorlagentypparameter aus Standardfunktionsargumenten abzuleiten.

Bedenken Sie den folgenden Codeausschnitt:

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

int main() {
  foo a;
  a.bar(5);
}</code>
Nach dem Login kopieren

Beim Kompilieren dieses Codes generiert der Compiler möglicherweise einen Fehler, der besagt: „Template-Argument für T konnte nicht abgeleitet werden.“ Um dieses Problem zu beheben, muss das Vorlagenargument im Funktionsaufruf explizit angegeben werden, z. B. a.bar(5). Aber warum kann der Compiler den Typ überhaupt nicht ableiten?

In C 03 verbieten die Sprachspezifikationen ausdrücklich die Verwendung von Standardargumenten zum Ableiten von Vorlagenargumenten. Laut C 03 §14.8.2/17 „kann ein Vorlagentypparameter nicht aus dem Typ eines Funktionsstandardarguments abgeleitet werden.“

In C 11 führte die Sprache eine neue Funktion ein, die die Bereitstellung von Standardparametern ermöglicht Vorlagenargumente für Funktionsvorlagen:

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

Das Standardvorlagenargument ist jedoch obligatorisch. Wenn es nicht bereitgestellt wird, verbietet der Compiler weiterhin die Verwendung des Standardfunktionsarguments für die Ableitung von Vorlagenargumenten. In C 11 §14.8.2.5/5 heißt es:

„Ein Vorlagenparameter, der im Parametertyp eines Funktionsparameters verwendet wird, der ein Standardargument hat, das in dem Aufruf verwendet wird, für den ein Argumentabzug durchgeführt wird.“ ist ein nicht abgeleiteter Kontext.

Zusammenfassend lässt sich sagen, dass die Bereitstellung von Standardargumenten für Funktionsparameter zwar den Code vereinfachen kann, es jedoch wichtig ist, die Einschränkungen der Ableitung von Vorlagenargumenten in solchen Fällen zu verstehen. Standardargumente können nur dann für die Ableitung von Vorlagenargumenten verwendet werden, wenn explizit ein Standardvorlagenargument bereitgestellt wird.

Das obige ist der detaillierte Inhalt vonWarum kann C Vorlagenargumente nicht aus Standardfunktionsargumenten ableiten?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!