在这里,我们将看到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