Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 사용자 정의 리터럴


여기서 우리는 C++에서 사용자 정의 리터럴의 개념을 볼 것입니다. C++ 버전 11부터 사용자 정의 리터럴(UDL)이 C++에 추가되었습니다. C++는 또한 다양한 내장 유형에 대한 리터럴을 제공하지만 제한적입니다.

내장 리터럴 -

  • 31(정수)

  • 3.5(더블)

  • 4.2F(플로트)

  • 'p'(문자)

  • 31ULL(부호 없는 Long Long)

  • 0xD0(부호 없는 16진수 정수)

  • "pq"(문자열)

내장 리터럴 외에도 때때로 사용자 정의 리터럴이 필요합니다. 그 뒤에는 몇 가지 이유가 있습니다. 몇 가지 예를 들어 살펴보겠습니다. −

하나의 가중치 변수를 정의하고 싶지만 다음과 같이 정의하는 것처럼 단위를 지정할 수 없다고 가정합니다. -

long double Weight = 3.5;

우리는 단위(파운드?, 킬로그램? 그램?)에 대해 전혀 모르지만 UDL을 사용하여 값과 함께 단위를 연결할 수 있습니다. 몇 가지 이점이 있습니다. 코드를 더 읽기 쉽게 만들고 컴파일 시간 동안 변환도 지원합니다.

weight = 5.6kg;
ratio = 5.6kg/2.1lb;

위의 비율을 찾으려면 동일한 단위로 변환해야 합니다. 그러나 UDL은 단위 번역 비용을 극복하는 데 도움이 됩니다. 이 경우 사용자 정의 유형의 경우 사용자 정의 리터럴을 정의하고 내장 유형의 경우 새로운 형태의 리터럴을 정의할 수 있습니다. UDL은 많은 코딩 시간을 절약할 수 없지만 더 빠른 실행으로 인해 점점 더 많은 계산을 컴파일 타임으로 전환할 수 있습니다.

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#include<iostream>
#include<iomanip>
using namespace std;
unsigned long long int operator"" _kb( unsigned long long int x ) {
   return x*1024;
}
unsigned long long int operator"" _b( unsigned long long int x ) {
   return x;
}
unsigned long long int operator"" _mb( unsigned long long int x ) {
   return x * 1024 * 1024;
}
int main() {
   unsigned long long int size = 24_kb;
   cout << "Size:" << size << endl;
   cout << "Few more MB:" << ( size + 2_mb ) << endl;
   cout << "Size Div:" <<( 10_kb / 2_kb ) << endl;
   cout << "1KB = " <<( 8_b * 128_b ) << endl;
   return 0;
}

출력

Size:24576
Few more MB:2121728
Size Div:5
1KB = 1024