C ++中的用户定义文字

在这里,我们将看到C ++中用户定义文字的概念。从C ++版本11开始,在C ++中添加了用户定义的文字(UDL)。C ++还提供了各种内置类型的文字,但是这些文字是有限的。

内置文字-

  • 31(整数)

  • 3.5(双人)

  • 4.2F(Float)

  • 'p'(字符)

  • 31ULL(Unsigned Long Long)

  • 0xD0(无符号十六进制整数)

  • “ 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