Szukaj…


Wprowadzenie

Tradycyjnie dosłowność jest wyrażeniem oznaczającym stałą, której typ i wartość są widoczne po jej pisowni. Na przykład 42 jest dosłowne, podczas gdy x nie jest, ponieważ trzeba zobaczyć jego deklarację, aby poznać jej typ i przeczytać poprzednie wiersze kodu, aby poznać jego wartość.

Jednak C ++ 11 dodał także literały zdefiniowane przez użytkownika , które nie są literałami w tradycyjnym znaczeniu, ale mogą być użyte jako skrót dla wywołań funkcji.

prawdziwe

Słowo kluczowe oznaczające jedną z dwóch możliwych wartości typu bool .

bool ok = true;
if (!f()) {
    ok = false;
    goto end;
}

fałszywy

Słowo kluczowe oznaczające jedną z dwóch możliwych wartości typu bool .

bool ok = true;
if (!f()) {
    ok = false;
    goto end;
}

nullptr

C ++ 11

Słowo kluczowe oznaczające stałą wskaźnika zerowego. Można go przekonwertować na dowolny wskaźnik lub typ wskaźnika na element członkowski, uzyskując pusty wskaźnik typu wynikowego.

Widget* p = new Widget();
delete p;
p = nullptr; // set the pointer to null after deletion

Zauważ, że nullptr nie jest wskaźnikiem. Typ nullptr jest podstawowym typem znanym jako 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
}

to

W ciągu funkcję składową klasy, Hasło this jest wskaźnik do instancji klasy, na których funkcja została wywołana. this nie może być stosowany w statycznej funkcji składowej.

struct S {
    int x;
    S& operator=(const S& other) {
        x = other.x;
        // return a reference to the object being assigned to
        return *this;
    }
};

Typ this zależy cv kwalifikacji funkcji użytkownik: Jeżeli X::f znaczy const , wówczas typ this ciągu f jest const X* , więc this nie może być wykorzystany do modyfikacji bez statycznych elementów danych z poziomu const funkcja członka. Podobnie dziedziczy this volatile kwalifikację z funkcji, w której się pojawia.

C ++ 11

można this również użyć w inicjatorze nawiasów klamrowych lub równości dla niestatycznego elementu danych.

struct S;
struct T {
    T(const S* s);
    // ...
};
struct S {
    // ...
    T t{this};
};

this jest rvalue, więc nie można przypisać.

Dosłowne liczby całkowite

Literał całkowity jest podstawowym wyrażeniem formy

  • dziesiętny-dosłowny

Jest to niezerowa cyfra dziesiętna (1, 2, 3, 4, 5, 6, 7, 8, 9), po której następuje zero lub więcej cyfr dziesiętnych (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

int d = 42;

  • ósemkowo-dosłowny

Jest to cyfra zero (0), po której następuje zero lub więcej cyfr ósemkowych (0, 1, 2, 3, 4, 5, 6, 7)

int o = 052

  • szesnastkowy

Jest to sekwencja znaków 0x lub sekwencja znaków 0X, po której następuje jedna lub więcej cyfr szesnastkowych (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;

  • binarno-dosłowny (od C ++ 14)

Jest to sekwencja znaków 0b lub sekwencja znaków 0B, po której następuje jedna lub więcej cyfr binarnych (0, 1)

int b = 0b101010; // C++14

Sufiks liczb całkowitych, jeśli jest podany, może zawierać jeden lub oba z następujących elementów (jeśli oba są podane, mogą występować w dowolnej kolejności:

  • sufiks bez znaku (znak u lub znak U)

unsigned int u_1 = 42u;

  • długi przyrostek (znak l lub znak L) lub długi-długi przyrostek (ciąg znaków ll lub ciąg znaków LL) (od C ++ 11)

Następujące zmienne są również inicjowane do tej samej wartości:

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

Notatki

Litery w literałach liczb całkowitych nie uwzględniają wielkości liter: 0xDeAdBaBeU i 0XdeadBABEu reprezentują ten sam numer (jednym wyjątkiem jest długi i długi przyrostek, którym jest ll lub LL, nigdy lL lub Ll)

Nie ma ujemnych literałów całkowitych. Wyrażenia takie jak -1 stosują jednoargumentowy operator minus do wartości reprezentowanej przez literał, co może obejmować konwersje typu niejawnego.

W C przed C99 (ale nie w C ++), nieszyfrowane wartości dziesiętne, które nie pasują do long int, mogą mieć typ unsigned long int.

W przypadku użycia wyrażenia kontrolnego #if lub #elif wszystkie podpisane stałe całkowite działają tak, jakby miały typ std :: intmax_t, a wszystkie stałe całkowite bez znaku działają tak, jakby miały typ std :: uintmax_t.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow