Ich arbeite durch "C ++ Template Metaprogramming" von Abrahams & amp; Gurtovoy " Dies ist nicht wirklich in Kapitel zwei, aber ist etwas, was ich versuchte, während ich an der ersten Übung (2.10, 2.0) arbeitete, die mich verwirrte:
%Vor%Die Ausgabe ist 'falsch'. Allerdings, wenn ich die Referenzen entfernen, d. H. 'Int const' und 'int'. Die Ausgabe ist 'wahr'.
Wenn Sie dasselbe mit Zeigern versucht haben, wie in
%Vor% Sie würden feststellen, dass es auch falsch ist, da boost::add_const<int *>::type
int *const
type erzeugt, was offensichtlich nicht dasselbe ist wie int const *
.
Im Prinzip passiert dasselbe mit Referenzen, d. h. boost::add_const<int &>::type
ist ein Versuch, int &const
zu erzeugen. Formal ist der Typ int &const
in C ++ unzulässig - cv-qualification kann nicht auf die Referenz selbst angewendet werden. Daher ist boost::add_const
in diesem Fall als No-Op-Objekt ausgelegt, was bedeutet, dass boost::add_const<int &>::type
erneut int &
generiert.
Sie können const nicht zu einer Referenz hinzufügen, es wäre int& const
, was nicht möglich ist.
Genau wie bei typedef ist das Hinzufügen von Qualifizierern kein Textersatz, sondern etwas, das für den gesamten Typ funktioniert.
Tags und Links c++ boost metaprogramming