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 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.