Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Literal do người dùng định nghĩa (User Defined Literals) trong C++

Từ C++11, C++ hỗ trợ User Defined Literals (UDL) - cho phép lập trình viên định nghĩa hậu tố riêng cho các giá trị literal, giúp mã nguồn dễ đọc hơn và hỗ trợ chuyển đổi đơn vị tại thời điểm biên dịch.

Literal tích hợp sẵn

  • 31 (Integer)
  • 3.5 (Double)
  • 4.2F (Float)
  • 'p' (Character)
  • 31ULL (Unsigned Long Long)
  • 0xD0 (Hexadecimal)
  • "pq" (String)

Tại sao cần UDL?

Ví dụ: long double Weight = 3.5; không rõ đơn vị (kg, lb, g?). Với UDL:

weight = 5.6_kg;
ratio = 5.6_kg / 2.1_lb; // Tự động chuyển đổi đơn vị tại compile-time

Cú pháp định nghĩa UDL

ReturnType operator"" _suffix(ParameterType value) {
    // xử lý value, trả về kết quả
}

Ví dụ: Đơn vị bộ nhớ

#include <iostream>
#include <iomanip>
using namespace std;

unsigned long long operator"" _kb(unsigned long long x) { return x * 1024; }
unsigned long long operator"" _b(unsigned long long x) { return x; }
unsigned long long operator"" _mb(unsigned long long x) { return x * 1024 * 1024; }

int main() {
    unsigned long long size = 24_kb;
    cout << "Size: " << size << endl;              // 24576
    cout << "Few more MB: " << (size + 2_mb) << endl; // 2121728
    cout << "Size Div: " << (10_kb / 2_kb) << endl;    // 5
    cout << "1KB = " << (8_b * 128_b) << endl;         // 1024
    return 0;
}

Kết quả

Size: 24576
Few more MB: 2121728
Size Div: 5
1KB = 1024

Lợi ích: Tăng khả năng đọc mã, chuyển đổi đơn vị tại compile-time, giảm chi phí runtime.