Suche…
Einführung
Traditionell ist ein Literal ein Ausdruck, der eine Konstante bezeichnet, deren Typ und Wert aus der Schreibweise ersichtlich sind. Zum Beispiel ist 42
ein Literal, während x
nicht ist, da man seine Deklaration sehen muss, um seinen Typ zu kennen, und vorherige Codezeilen lesen, um seinen Wert zu kennen.
In C ++ 11 wurden jedoch auch benutzerdefinierte Literale hinzugefügt, bei denen es sich nicht um herkömmliche Literale handelt , die jedoch als Abkürzung für Funktionsaufrufe verwendet werden können.
wahr
Ein Schlüsselwort, das einen der zwei möglichen Werte des Typs bool
angibt.
bool ok = true;
if (!f()) {
ok = false;
goto end;
}
falsch
Ein Schlüsselwort, das einen der zwei möglichen Werte des Typs bool
angibt.
bool ok = true;
if (!f()) {
ok = false;
goto end;
}
nullptr
Ein Schlüsselwort, das eine Nullzeiger-Konstante bezeichnet. Es kann in einen beliebigen Zeiger oder Zeiger-zu-Mitglied-Typ konvertiert werden, der einen Nullzeiger des resultierenden Typs ergibt.
Widget* p = new Widget();
delete p;
p = nullptr; // set the pointer to null after deletion
Beachten Sie, dass nullptr
selbst kein Zeiger ist. Der Typ von nullptr
ist ein grundlegender Typ, der als std::nullptr_t
.
void f(int* p);
template <class T>
void g(T* p);
void h(std::nullptr_t p);
int main() {
f(nullptr); // ok
g(nullptr); // error
h(nullptr); // ok
}
diese
Innerhalb einer Member-Funktion einer Klasse ist das Schlüsselwort this
ein Zeiger auf die Instanz der Klasse, in der die Funktion aufgerufen wurde. this
kann nicht in einer statischen Memberfunktion verwendet werden.
struct S {
int x;
S& operator=(const S& other) {
x = other.x;
// return a reference to the object being assigned to
return *this;
}
};
Die Art der this
hängt von der CV-Qualifikation der Elementfunktion: Wenn X::f
ist const
, dann die Art der this
innerhalb f
ist const X*
, so dass this
nicht verwendet werden , können nicht statischen Datenelementen zu modifizieren , von innerhalb einer const
Mitgliedsfunktion. Ebenso erbt this
die volatile
Qualifizierung von der Funktion, in der es erscheint.
this
kann auch in einem Brace-or-Equalizer für ein nicht statisches Datenelement verwendet werden.
struct S;
struct T {
T(const S* s);
// ...
};
struct S {
// ...
T t{this};
};
this
ist ein Wert, der nicht zugewiesen werden kann.
Integer-Literal
Ein ganzzahliges Literal ist ein primärer Ausdruck des Formulars
- Dezimal-Literal
Es ist eine Dezimalstelle ungleich Null (1, 2, 3, 4, 5, 6, 7, 8, 9), gefolgt von null oder mehr Dezimalstellen (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
int d = 42;
- Oktal-Literal
Es ist die Ziffer Null (0) gefolgt von Null oder mehr Oktalstellen (0, 1, 2, 3, 4, 5, 6, 7).
int o = 052
- Hex-Literal
Es ist die Zeichenfolge 0x oder die Zeichenfolge 0X, gefolgt von einer oder mehreren Hexadezimalziffern (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, A, b, B, c, C) d, D, e, E, f, F)
int x = 0x2a;
int X = 0X2A;
- Binär-Literal (seit C ++ 14)
Es ist die Zeichenfolge 0b oder die Zeichenfolge 0B gefolgt von einer oder mehreren binären Ziffern (0, 1).
int b = 0b101010; // C++14
Ein Integer-Suffix kann, falls angegeben, eine oder beide der folgenden Angaben enthalten (wenn beide angegeben werden, können sie in beliebiger Reihenfolge angezeigt werden:
- vorzeichenloses Suffix (das Zeichen u oder das Zeichen U)
unsigned int u_1 = 42u;
- long-Suffix (das Zeichen l oder das Zeichen L) oder das long-long-Suffix (die Zeichenfolge ll oder die Zeichenfolge LL) (seit C ++ 11)
Die folgenden Variablen werden ebenfalls mit demselben Wert initialisiert:
unsigned long long l1 = 18446744073709550592ull; // C++11
unsigned long long l2 = 18'446'744'073'709'550'592llu; // C++14
unsigned long long l3 = 1844'6744'0737'0955'0592uLL; // C++14
unsigned long long l4 = 184467'440737'0'95505'92LLU; // C++14
Anmerkungen
Buchstaben in den Ganzzahl-Literalen unterscheiden nicht zwischen Groß- und Kleinschreibung: 0xDeAdBaBeU und 0XdeadBABEu stellen die gleiche Zahl dar (eine Ausnahme ist das long-long-Suffix, das entweder ll oder LL ist, niemals ll oder Ll).
Es gibt keine negativen Ganzzahlliterale. Ausdrücke wie -1 wenden den unären Minusoperator auf den durch das Literal dargestellten Wert an, der implizite Typkonvertierungen beinhalten kann.
In C vor C99 (aber nicht in C ++) dürfen nicht gefasste Dezimalwerte, die nicht in long int passen, den Typ unsigned long int haben.
Wenn sie in einem steuernden Ausdruck von #if oder #elif verwendet werden, verhalten sich alle vorzeichenbehafteten Ganzzahlkonstanten so, als hätten sie den Typ std :: intmax_t, und alle vorzeichenlosen Ganzzahlkonstanten verhalten sich so, als hätten sie den Typ std :: uintmax_t.