C++ 中的用户定义字面量
在这里,我们将了解 C++ 中用户定义字面量的概念。从 C++ 11 版本开始,用户定义字面量 (UDL) 被添加到 C++ 中。C++ 还为各种内置类型提供了字面量,但这些字面量是有限的。
内置字面量 -
31(整数)
3.5(双精度浮点数)
4.2F(单精度浮点数)
'p'(字符)
31ULL(无符号长长整数)
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
广告