Поиск…


Вступление

Традиционно литерал является выражением, обозначающим константу, тип и значение которой очевидны из ее орфографии. Например, 42 является литералом, в то время как x нет, так как нужно, чтобы его объявление знало его тип и читало предыдущие строки кода, чтобы узнать его значение.

Тем не менее, C ++ 11 также добавил пользовательские литералы , которые не являются литералами в традиционном смысле, но могут использоваться в качестве сокращений для вызовов функций.

правда

Ключевое слово, обозначающее одно из двух возможных значений типа bool .

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

ложный

Ключевое слово, обозначающее одно из двух возможных значений типа bool .

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

nullptr

C ++ 11

Ключевое слово, обозначающее константу нулевого указателя. Он может быть преобразован в любой тип указателя или указателя-члена, что дает нулевой указатель результирующего типа.

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

Обратите внимание, что nullptr сам по себе не является указателем. Тип nullptr - это фундаментальный тип, известный как 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
}

этот

Внутри функции-члена класса ключевое слово this является указателем на экземпляр класса, на котором была вызвана функция. this не может использоваться в статической функции-члене.

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

Тип this зависит от cv-квалификации функции-члена: если X::f является const , то тип this внутри f является const X* , поэтому this не может использоваться для изменения нестатических элементов данных изнутри const . Аналогично, this наследует volatile квалификацию от функции, в которой она появляется.

C ++ 11

this также можно использовать в элементе для выравнивания или выравнивания для нестатического элемента данных.

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

this значение r, поэтому его нельзя назначить.

Целочисленный литерал

Целочисленный литерал является основным выражением формы

  • десятичный литерал

Это отличная от нуля цифра (1, 2, 3, 4, 5, 6, 7, 8, 9), за которой следует ноль или более десятичных цифр (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

int d = 42;

  • восьмеричный литерал

Это цифра нуль (0), за которой следует ноль или более восьмеричные цифры (0, 1, 2, 3, 4, 5, 6, 7)

int o = 052

  • шестигранный буквальный

Это последовательность символов 0x или последовательность символов 0X, за которой следует одна или несколько шестнадцатеричных цифр (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;

  • бинарный-литерал (с C ++ 14)

Это последовательность символов 0b или последовательность символов 0B, за которой следует одна или несколько двоичных цифр (0, 1)

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

Целочисленный суффикс, если он предоставлен, может содержать одно или оба из следующих (если оба они предусмотрены, они могут отображаться в любом порядке:

  • unsigned-suffix (символ u или символ U)

unsigned int u_1 = 42u;

  • long-suffix (символ l или символ L) или длинный-длинный суффикс (последовательность символов ll или последовательность символов LL) (поскольку C ++ 11)

Следующие переменные также инициализируются с тем же значением:

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

Заметки

Буквы в целочисленных литералах не чувствительны к регистру: 0xDeAdBaBeU и 0XdeadBABEu представляют одинаковое число (одним исключением является длинный-длинный суффикс, который является либо ll, либо LL, ни lL, ни Ll)

Нет отрицательных целых литералов. Выражения, такие как -1, применяют унарный оператор минус к значению, представленному литералом, что может включать неявные преобразования типов.

В C до C99 (но не в C ++) недопустимые десятичные значения, не соответствующие длинному int, имеют тип unsigned long int.

При использовании в контрольном выражении #if или #elif все подписанные целочисленные константы действуют так, как будто они имеют тип std :: intmax_t, и все неподписанные целочисленные константы действуют так, как будто они имеют тип std :: uintmax_t.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow