Was bedeuten doppelte Klammern in decltype((...))?
Der C-Standard definiert das Verhalten von decltype(( ...)) Syntax in Abschnitt 7.6.1.2/4 des FCD. Mit dieser Syntax können Programmierer den Typ eines Ausdrucks ableiten, wie im folgenden Beispiel gezeigt:
<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>
Das Vorhandensein von Klammern um den Ausdruck in decltype((a->x)) macht einen erheblichen Unterschied im abgeleiteten Typ. Ohne die Klammern ist der Typ einfach doppelt und gibt den Rückgabetyp des Mitgliedszugriffs an (a->x).
Mit den Klammern wird der Ausdruck jedoch zu einem L-Wert. Laut Standard ist decltype(e) T&, wenn e ein L-Wert ist, wobei T der Typ von e ist. In diesem Fall ist T double und der abgeleitete Typ ist daher const double&.
Daher erzwingen die Klammern in decltype((a->x)) den Abzug, den Ausdruck als L-Wert zu behandeln, was zur Folge hat in einem anderen Typ, als wenn die Klammern weggelassen würden.
Das obige ist der detaillierte Inhalt vonWelche Auswirkung haben Klammern in „decltype((...))'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!