Heute sah ich einige Code wie folgt aus:'const declltype ((a))' deklariert keine const-Referenz?
int a = 0;
const decltype((a)) x = 10; // Error
const int b = 0;
decltype ((b)) y = 42; // Correct
Ich kann sehen, warum der richtige Code korrekt ist, aber ich kann nicht sehen, warum die falschen Code falsch ist.
Ich testete es und fand es nur ein wenig seltsam.
const decltype((a)) x = 10;
Dies sollte eine const int&
richtig definieren? Aber es kompiliert nicht! error: non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'
.
Ich änderte es zu const decltype((a)) x = a;
dann kompiliert es.
Nun, ist x
eine const Referenz? Nein, ich habe festgestellt, dass es sich um eine nicht konstante Referenz handelt. Ich kann den Wert a
durch x
ändern.
Warum hat der Modifikator const
keine Wirkung?
Die "const" wird auf den Verweis (und ignoriert), anstatt auf den Typ, auf den verwiesen wird, angewendet. –
Das Kombinieren von 'declltype' mit Modifikatoren funktioniert genauso wie das Anwenden von Modifikatoren auf einen' typedef'-ed-Typ. Es ist KEINE Textersetzung. –
@ T.C. @ ben-voigt Oh, ich habe es. Also wird "const" auf den ganzen Körper von "int &" angewendet, um "const reference to int" zu sein, nicht nur kombiniert zu "const int &", Bezug auf const int ... Richtig? – CyberLuc