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

C ++ 11

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.

C ++ 11

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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow