여기서 우리는 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