Als allgemeine Regel behält decltype
Konstanz:
Aber für const
Rückgabetypen, die grundlegende Typen zurückgeben, scheint decltype
const
weg zu werfen:
Warum verwirft decltype
in diesem Fall die Konstanz? Ich meine die Frage auf zwei Arten:
Danke.
Das von Ihnen beobachtete Verhalten ist korrekt: decltype(makeCI())
ist int
, nicht int const
.
Der Funktionsaufruf makeCI()
ist ein prvalue-Ausdruck. Per C ++ 11 §3.10 [basic.lval] / 4:
Klassenprvalues können cv-qualifizierte Typen haben; Nicht-Klasse-Prvalues haben immer cv-unqualifizierte Typen.
Der Begriff "cv-qualification" bezieht sich auf Const- und Volatile-Qualification. int
ist kein Klassentyp, daher ist der Typ des Rvalue-Ausdrucks makeCI()
int
und nicht const-qualifiziert.
(In neueren Entwürfen des C ++ - Sprachstandards, z. B. N3690, wurde dieser Text entfernt und durch neuen Text in §5 [expr] / 6 ersetzt, der besagt: "Wenn ein prvalue anfänglich den Typ" cv T hat, "wo T ein cv-unqualifizierter Nicht-Klassen-Nicht-Array-Typ ist, wird der Typ des Ausdrucks vor jeder weiteren Analyse auf T eingestellt." Siehe CWG defekt 1261 für Details.)