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 ( expression )
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; // type is const char*
decltype(ch) var2; // type is char
decltype(a) var4; // type is A*
decltype(a->value) var5; // type is double
decltype((a->value)) var6 = e; // type is const double&
decltype(foo()) var7; // f is const int*
decltype(b->function()) var8; // type is const A*
decltype(c->value) var9; // type is B*
decltype(GetValue(e)) var10; // well-formed, the declaration is not ambiguous
decltype(GetValue) var11; // ill-formed, represents an overload function