Wie kommt es, dass ein const temporary eine nichtkonstante Elementfunktion über eine const-Funktion aufruft? [Duplikat]

8

Der Beispielcode stammt aus: Ссылка (Ich habe ein wenig modifiziert.)

%Vor%

Und die Ausgabe ist:

%Vor%

Im zweiten Aufruf ist T const qualifiziert, also sollte T() die const-Version aufrufen, richtig? oder gibt es einige spezielle Regeln, die ich verpasst habe?

    
Frahm 22.05.2013, 11:49
quelle

1 Antwort

3

Das relevante Zitat aus dem Standard ist 5.2.3 [expr.type.conv] / 2

  

Der Ausdruck T (), wobei T ein einfacher Typ- oder Typname-Spezifizierer für einen vollständigen Objekttyp ohne Array oder den (möglicherweise cv-qualifizierten) Void-Typ ist, erzeugt einen Pr-Wert des angegebenen Typs , die mit Wert initialisiert wird (8.5; für den Fall void () wird keine Initialisierung durchgeführt). [Anmerkung: Wenn T ein Nicht-Klassen-Typ ist, der cv-qualifiziert ist, werden die cv-Qualifizierer ignoriert, wenn der Typ des resultierenden prvalue (3.10) bestimmt wird. -Hinweis]

Der Wortlaut im Standard erwähnt explizit (in nicht-normativer Form), dass für Nicht-Klassen -Typen die Konst-volatile-Qualifikation weggelassen wird, aber in Ihrem Fall ist der Typ eine -Klasse und der Hinweis gilt nicht. Es scheint, dass VS die gleiche Regel anwendet, die für Nicht-Klassen-Typen angewendet wird.

    
David Rodríguez - dribeas 22.05.2013, 12:01
quelle