Warum ist boost :: is_sameint const &, boost :: add_constrint & :: value gleich false?

8

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'.

    
Chris Huang-Leaver 02.06.2011, 16:39
quelle

2 Antworten

11

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.

    
AnT 02.06.2011, 16:57
quelle
9

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.

    
Bo Persson 02.06.2011 16:42
quelle

Tags und Links