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

更新于: 2020-08-27

303 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告