Typ-Bezeichner decltype (C++11)
Nach oben zu C++11-Features - Index
Der C++11-Standard enthält das Schlüsselwort und den Operator decltype, der den Typ eines Ausdrucks repräsentiert. Dieses C++11-Feature wurde zu BCC32 hinzugefügt.
Syntax
Das Format des decltype-Operators lautet:
decltype ( Ausdruck )
Regeln für die Auswertung von decltype(e):
- Wenn
eein Bezeichnerausdruck für den Zugriff auf einen Klassen-Member ist, dann istdecltype(e)der Typ des vonebezeichneten Elements. Wenn ein solches Element nicht vorhanden odereder Name einer überladenen Funktionsmenge ist, so besteht eine Mehrdeutigkeit unddecltype(e)ist ungültig. - Wenn
eein Funktionsaufruf ist oder einen überladenen Operator aufruft, so istdecltype(e)der von der Funktion zurückgegebene Typ. - Wenn
eein L-Wert ist, so istdecltype(e)eine Referenz aufT (T&), wobei T der Typ voneist. - Wenn keiner dieser Fälle zutrifft, ist
decltype(e)der Typ vone.
Beispiele
Dieses Beispiel stellt einige Anwendungsmöglichkeiten für decltype bereit.
Die folgenden Deklarationen der Strukturen und Funktionen sind für das Beispiel erforderlich und müssen in der Header-Datei gesetzt werden:
const int* foo() {
return new int[0];
}
struct A {
double value;
};
class B {
int value;
public:
const A* function() {
return new A();
}
};
double GetValue(int one);
long int GetValue(double d);
template<class T>
class C {
public:
T* value;
};
Der Quelltext lautet:
double e;
const char *pch;
char ch;
A* a = new A();
B* b = new B();
C<B> *c = new C<B>();
decltype(pch) var1; // Typ ist const char*
decltype(ch) var2; // Typ ist char
decltype(a) var4; // Typ ist A*
decltype(a->value) var5; // Typ ist double
decltype((a->value)) var6 = e; // Typ ist const double&
decltype(foo()) var7; // f ist const int*
decltype(b->function()) var8; // Typ ist const A*
decltype(c->value) var9; // Typ ist B*
decltype(GetValue(e)) var10; // wohlgeformt, die Deklaration ist nicht mehrdeutig
decltype(GetValue) var11; // nicht wohlgeformt, repräsentiert eine überladene Funktion