Heim > Backend-Entwicklung > C++ > Warum können C-Vorlagenparameter im Gegensatz zu Funktionen nicht von Klassenkonstruktoren abgeleitet werden?

Warum können C-Vorlagenparameter im Gegensatz zu Funktionen nicht von Klassenkonstruktoren abgeleitet werden?

Patricia Arquette
Freigeben: 2024-12-03 15:13:13
Original
638 Leute haben es durchsucht

Why Can't C   Template Parameters Be Inferred from Class Constructors, Unlike Functions?

Warum können Vorlagenparameter nicht aus Klassenkonstruktoren abgeleitet werden?

In C können Vorlagenparameter aus Funktionsparametern abgeleitet werden, was eine bequeme Typableitung ermöglicht. Diese Schlussfolgerung erstreckt sich jedoch nicht auf Klassenkonstruktoren.

Grund:
Das Fehlen einer Schlussfolgerung für Klassenkonstruktoren ergibt sich aus der Tatsache, dass ein Konstruktor nicht der einzige Einstiegspunkt für a ist Klasse. Kopierkonstruktoren und Zuweisungsoperatoren können Objekte auch bearbeiten, ohne über explizite Informationen zu den Vorlagenparametern zu verfügen.

Betrachten Sie das folgende Beispiel:

MyClass m(string s);
MyClass *pm;
*pm = m;
Nach dem Login kopieren

In diesem Szenario ist es für den Compiler schwierig, dies zu bestimmen der Vorlagenparameter für pm, da sowohl m als auch pm diese Informationen fehlen. Daher würde das Zulassen von Inferenz für Klassenkonstruktoren zu Unsicherheit und syntaktischen Schwierigkeiten führen.

Ausnahmen in C 17:
In C 17 wurde eine Ausnahme von dieser Regel eingeführt. Für bestimmte Typen wie std::pair und std::tuple können Vorlagenparameter aus Konstruktorargumenten abgeleitet werden.

Wenn Inferenz unerwünscht ist:
In einigen Fällen Inferenz Vorlagenparameter von Konstruktoren sind möglicherweise nicht wünschenswert. Stellen Sie sich eine Klasse vor, die Standardvorlagenparameter verwendet, die der Konstruktor möglicherweise nicht überschreibt. Wenn Inferenz zulässig wäre, könnte sie möglicherweise die Standardwerte überschreiben und zu unerwartetem Verhalten führen.

Während die Inferenz von Vorlagenparametern für Funktionsparameter den Code prägnanter macht, sorgt das Fehlen einer solchen Inferenz für Klassenkonstruktoren für Klarheit und verhindert Potenzial Unklarheiten im Klassengebrauch.

Das obige ist der detaillierte Inhalt vonWarum können C-Vorlagenparameter im Gegensatz zu Funktionen nicht von Klassenkonstruktoren abgeleitet werden?. 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