Ich habe gerade gesehen, wie Stephan T. Lavavej CppCon 2018
über "Class Template Argument Deduction" sprach , wo er irgendwann übrigens sagt:
In C ++ fließen Informationen fast nie rückwärts ... Ich musste "fast" sagen, weil es ein oder zwei Fälle gibt, möglicherweise mehr, aber nur sehr wenige .
Obwohl ich versuchte herauszufinden, auf welche Fälle er sich beziehen könnte, konnte ich mir nichts einfallen lassen. Daher die Frage:
In welchen Fällen schreibt der C ++ 17-Standard vor, dass sich Typinformationen rückwärts verbreiten?
c++
types
language-lawyer
c++17
type-deduction
Massimiliano
quelle
quelle
Antworten:
Hier ist mindestens ein Fall:
Wenn Sie dies tun
foo f; int x = f; double y = f;
, fließen die Typinformationen "rückwärts", um herauszufinden, was drinT
istoperator T
.Sie können dies auf eine fortgeschrittenere Weise verwenden:
also jetzt kann ich tun
und es funktioniert.
Natürlich, warum nicht einfach
{1,2,3}
? Nun,{1,2,3}
ist kein Ausdruck.die zugegebenermaßen etwas mehr Zauberei erfordern: Live-Beispiel . (Ich muss die Ableitungsrückgabe veranlassen, eine SFINAE-Prüfung von F durchzuführen, dann die F SFINAE-freundlich machen, und ich muss std :: initializer_list im deduce_return_t-Operator T blockieren.)
quelle
&&
Qualifikationsspiel auf deroperator T()
ist eine tolle Sache; Es hilft, die schlechte Interaktion mit zu vermeiden,auto
indem es einen Kompilierungsfehler verursacht, wennauto
es hier missbraucht wird.Stephan T. Lavavej erklärte den Fall, über den er sprach, in einem Tweet :
Beispiele hierfür finden Sie auf der cppreference-Seite unter Adresse der überladenen Funktion . Ich habe einige davon unten ausgenommen:
Michael Park fügt hinzu :
und bietet dieses Live-Beispiel :
was ich hier etwas näher erläutere .
quelle
Ich glaube beim statischen Gießen überlasteter Funktionen geht der Fluss in die entgegengesetzte Richtung wie bei der üblichen Überlastauflösung. Eines davon ist also rückwärts, denke ich.
quelle