Warum entfernt declltype const von Rückgabetypen für integrierte Typen?

8

Als allgemeine Regel behält decltype Konstanz:

%Vor%

Aber für const Rückgabetypen, die grundlegende Typen zurückgeben, scheint decltype const weg zu werfen:

%Vor%

Warum verwirft decltype in diesem Fall die Konstanz? Ich meine die Frage auf zwei Arten:

  1. Welcher Teil des Standards spezifiziert dieses Verhalten?
  2. Was ist die Motivation, das Verhalten auf diese Weise zu spezifizieren?

Danke.

    
KnowItAllWannabe 29.08.2013, 04:18
quelle

1 Antwort

16

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

    
James McNellis 29.08.2013, 04:57
quelle

Tags und Links