숫자, 부울 및 포인터 리터럴

리터럴은 값을 직접 나타내는 프로그램 요소입니다. 이 문서에서는 정수, 부동 소수점, 부울 및 포인터 형식의 리터럴에 대해 설명합니다. 문자열 및 문자 리터럴에 대한 자세한 내용은 문자열 및 문자 리터럴(C++)을 참조하세요. 이러한 범주에 따라 고유한 리터럴을 정의할 수도 있습니다. 자세한 내용은 사용자 정의 리터럴(C++)을 참조하세요.

리터럴은 많은 컨텍스트에서 사용할 수 있지만 가장 일반적으로 명명된 변수를 초기화하고 인수를 함수에 전달하는 데 사용됩니다.

const int answer = 42;      // integer literal
double d = sin(108.87);     // floating point literal passed to sin function
bool b = true;              // boolean literal
MyClass* mc = nullptr;      // pointer literal

경우에 따라 리터럴을 해석하는 방법 또는 지정할 특정 형식을 컴파일러에 알려야 합니다. 이 작업은 리터럴에 접두사 또는 접미사를 추가하여 수행됩니다. 예를 들어 접두 0x 사는 컴파일러에 뒤에 있는 숫자를 16진수 값 0x35으로 해석하도록 지시합니다. ULL 접미사는 컴파일러에 값을 다음과 같이 5894345ULL형식으로 unsigned long long 처리하도록 지시합니다. 각 리터럴 형식에 대한 접두사 및 접미사의 전체 목록을 다음 섹션을 참조하세요.

정수 리터럴

정수 리터럴은 숫자로 시작하고 소수 부분이나 지수가 없습니다. 정수 리터럴을 10진수, 이진, 8진수 또는 16진수 형식으로 지정할 수 있습니다. 필요에 따라 접미사를 사용하여 정수 리터럴을 부호 없는 형식으로, 길고 긴 형식으로 지정할 수 있습니다.

접두사 또는 접미사가 없으면 컴파일러는 정수 리터럴 값 형식 int (32비트)을 제공하고, 값이 맞으면 형식(64비트)을 제공합니다 long long .

10진수 정수 계열 리터럴을 지정하려면 0이 아닌 숫자를 사용하여 지정을 시작합니다. 예시:

int i = 157;        // Decimal literal
int j = 0198;       // Not a decimal number; erroneous octal literal
int k = 0365;       // Leading zero specifies octal literal, not decimal
int m = 36'000'000  // digit separators make large values more readable

8진수 정수 계열 리터럴을 지정하려면 0으로 시작하여 0부터 7까지의 숫자 시퀀스를 지정합니다. 8진수 리터럴을 지정할 때 숫자 8과 9는 오류입니다. 예시:

int i = 0377;   // Octal literal
int j = 0397;   // Error: 9 is not an octal digit

16진수 정수 리터럴을 지정하려면 사양을 0x 시작하거나 0X ("x"의 경우는 중요하지 않음) 범위의 숫자 시퀀스0(또는 )를 통해 9fa (또는AF)를 시작합니다. 16진수 숫자 a(또는 A)부터 f(또는 F)는 10부터 15 사이의 값을 나타냅니다. 예시:

int i = 0x3fff;   // Hexadecimal literal
int j = 0X3FFF;   // Equal to i

부호 없는 형식을 지정하려면 접미사 또는 U 접미사를 사용합니다u. 긴 형식을 지정하려면 접미사 또는 L 접미사를 사용합니다l. 64비트 정수 계열 형식을 지정하려면 LL 또는 ll 접미사를 사용합니다. i64 접미사는 여전히 지원되지만 권장하지는 않습니다. Microsoft 전용이며 이식 가능하지 않습니다. 예시:

unsigned val_1 = 328u;                  // Unsigned value
long val_2 = 0x7FFFFFL;                 // Long value specified
                                        //  as hex literal
unsigned long val_3 = 0776745ul;        // Unsigned long value
auto val_4 = 108LL;                           // signed long long
auto val_4 = 0x8000000000000000ULL << 16;     // unsigned long long

숫자 구분 기호: 작은따옴표 문자(아포스트로피)를 사용하여 값을 더 큰 숫자로 구분하여 사용자가 더 쉽게 읽을 수 있도록 할 수 있습니다. 구분 기호는 컴파일에 영향을 주지 않습니다.

long long i = 24'847'458'121;

부동 소수점 리터럴

부동 소수점 리터럴은 소수 부분이 있어야 하는 값을 지정합니다. 이러한 값은 소수점(.)을 포함하며 지수를 포함할 수 있습니다.

부동 소수점 리터럴에는 숫자의 값을 지정하는 중요도(가수라고도 함)가 있습니다. 숫자의 크기를 지정하는 지수가 있습니다. 또한 리터럴의 형식을 지정하는 선택적 접미사가 있습니다. significand는 숫자 시퀀스 뒤에 마침표, 숫자의 소수 부분을 나타내는 선택적 숫자 시퀀스로 지정됩니다. 예시:

18.46
38.

지수는(있는 경우) 다음 예제와 같이 숫자의 크기를 10의 거듭제곱으로 지정합니다.

18.46e0      // 18.46
18.46e1      // 184.6

지수는 의미가 같거나 E선택적 기호(+ 또는 -) 및 숫자 시퀀스를 사용하여 e 지정할 수 있습니다. 지수가 있는 경우 18E0과 같은 정수에는 뒤에 오는 소수점이 필요하지 않습니다.

부동 소수점 리터럴은 기본적으로 .를 입력 double합니다. 접미사 f 또는 l 접미사를 사용하거나 FL (접미사가 대/소문자를 구분하지 않음) 리터럴을 로 float 지정하거나 long double지정할 수 있습니다.

표현은 double 동일하지만 long double 형식은 동일하지 않습니다. 예를 들어 다음과 같은 오버로드된 함수가 있을 수 있습니다.

void func( double );

void func( long double );

부울 리터럴

부울 리터럴은 다음과 false같습니다true.

포인터 리터럴(C++11)

C++는 리터럴을 nullptr 도입하여 초기화되지 않은 포인터를 지정합니다. 이식 가능한 코드 nullptr 에서는 정수 형식 0 또는 매크로(예: NULL.) 대신 사용해야 합니다.

이진 리터럴(C++14)

이진 리터럴은 0B 또는 0b 접두사와 뒤에 오는 1과 0의 시퀀스를 사용하여 지정할 수 있습니다.

auto x = 0B001101 ; // int
auto y = 0b000001 ; // int

리터럴을 "매직 상수”로 사용하지 마세요.

리터럴은 식과 문에서 직접 사용할 수 있지만 항상 바람직한 프로그래밍 방법은 아닙니다.

if (num < 100)
    return "Success";

이전 예제에서는 명확한 의미를 전달하는 명명된 상수(예: "MAXIMUM_ERROR_THRESHOLD")를 사용하는 것이 좋습니다. 최종 사용자가 반환 값 "Success"를 볼 경우 명명된 문자열 상수 사용이 더 좋을 수 있습니다. 다른 언어로 지역화할 수 있는 파일의 단일 위치에 문자열 상수는 유지할 수 있습니다. 명명된 상수는 자신과 다른 사용자 모두 코드의 의도를 이해하는 데 도움이 됩니다.

참고 항목

어휘 규칙
C++ 문자열 리터럴
C++ 사용자 정의 리터럴