Typableitung mit doppelten Klammern in decltype
In C kann das Schlüsselwort decltype verwendet werden, um den Typ eines Ausdrucks zu bestimmen. Bei Verwendung mit doppelten Klammern zeigt es ein subtiles Verhalten, das zu Verwirrung führen kann.
Problem:
Bedenken Sie den folgenden Codeausschnitt:
<code class="cpp">const int&&& foo(); int i; struct A { double x; }; const A* a = new A(); decltype(foo()) x1 = i; // type is const int&&& decltype(i) x2; // type is int decltype(a->x) x3; // type is double decltype((a->x)) x4 = x3; // type is const double&</code>
Warum ändert das Hinzufügen von Klammern zu a->x in der vierten Zeile den resultierenden Typ von double zu const double&?
Antwort:
Die Erklärung liegt in die Regeln zum Ableiten von Typen mithilfe von decltype. Gemäß dem C-Sprachstandard:
Im gegebenen Beispiel:
Daher ändert das Hinzufügen von Klammern zu a->x den Typabzug vom Typ des Mitglieds, auf das zugegriffen wird, zu einem Verweis auf das Mitglied selbst.
Das obige ist der detaillierte Inhalt vonWarum ändert die Verwendung doppelter Klammern in „decltype' den resultierenden Typ?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!