수색…


소개

전통적으로 리터럴은 유형과 값이 철자로 인해 명확한 상수를 나타내는 식입니다. 예를 들어, 42 는 리터럴이고 x 는 타입을 알고 그 값을 알기 위해 이전 코드 라인을 읽어야한다는 선언을보아야하기 때문에 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

null 포인터 상수를 나타내는 키워드 . 포인터 나 멤버 유형 포인터로 변환하여 결과 유형의 널 포인터를 생성 할 수 있습니다.

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 다음의 유형 thisf 이다 const X* , 그래서 this 내에서 비 정적 데이터 멤버를 수정할 수 없다 const 멤버 함수. 마찬가지로, this 함수는 나타나는 함수에서 volatile 자격을 상속받습니다.

C ++ 11

this 비 정적 데이터 멤버에 대해 중괄호 또는 동등 초기 자 에서 사용할 수도 있습니다.

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

this rvalue이므로 할당 할 수 없습니다.

정수 리터럴

정수 리터럴은 양식의 기본 표현식입니다.

  • 소수점 - 리터럴

0이 아닌 10 진수 (0, 1, 2, 3, 4, 5, 6, 7)가 뒤에 오는 0이 아닌 십진수 (1, 2, 3, 4, 5, 6, 7, 8, 9)

int d = 42;

  • 8 진수

숫자 0 (0) 다음에 0 개 이상의 8 진수 (0, 1, 2, 3, 4, 5, 6, 7)

int o = 052

  • 헥스 리터럴

문자 시퀀스 0x 또는 문자 시퀀스 0X 다음에 하나 이상의 16 진수 (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;

  • 2 진 - 리터럴 (C ++ 14 이후)

문자 시퀀스 0b 또는 문자 시퀀스 0B 다음에 하나 이상의 이진 숫자 (0, 1)가옵니다.

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

정수 - 접미사 (제공되는 경우)는 다음 중 하나 또는 둘 모두를 포함 할 수 있습니다 (둘 다 제공되면 순서에 관계없이 나타날 수 있음).

  • 부호없는 접미사 (문자 U 또는 문자 U)

unsigned int u_1 = 42u;

  • long-suffix (문자 l 또는 문자 L) 또는 long-long-suffix (문자 시퀀스 11 또는 문자 시퀀스 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 또는 L1이 아닙니다)

음의 정수 리터럴은 없습니다. -1과 같은 표현식은 리터럴이 나타내는 값에 단항 마이너스 연산자를 적용하며 암시 적 유형 변환이 필요할 수 있습니다.

C99 이전의 C (C ++에서는 아님)에서 long 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