Heim >Backend-Entwicklung >C++ >Welche Auswirkung haben Klammern in „decltype((...))'?

Welche Auswirkung haben Klammern in „decltype((...))'?

Linda Hamilton
Linda HamiltonOriginal
2024-11-03 05:38:30383Durchsuche

 What's the Impact of Parentheses in `decltype((...))`?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn