文本运算符的重载

文本运算符重载,分为数值文本运算符,和字符串文本运算符。

先看一下数值类型的文本运算符:

constexpr unsigned int operator""_s(unsigned long long val) {
    return val / 2;
}
constexpr float operator""_s2(long double val) {
    return val / 2;
}

整数类型,其参数要求必须是unsigned long long 或者long double,返回值类型任意。

使用方式:

   constexpr auto i = 12.56_s2;
    constexpr auto m = 34567_s;

字符串类型文本运算符重载:

constexpr auto operator""_len(const char* val) {
    return val;
}
constexpr auto operator""_len2(const char* val,size_t size) {
    return size;
}
constexpr auto operator""_wlen(const wchar_t* val,size_t size) {
    return size;
}
constexpr auto operator""_wlen2(const char16_t* val, size_t size) {
    return size;
}

调用方式:

constexpr size_t i = "hello"_len2;  // 5u
    constexpr auto s = L"你好"_wlen;    // 2u

文本运算符的调用方式是固定的,文本在前,后面跟上函数名字,文本必须是字面量。

泛型文本运算符重载:

template<char... val>
constexpr auto operator""_p() {
    return (0 + ... + val);
}

调用方式:

constexpr auto i = 12345_p;     // 255

12345被解析为5个独立的字符,并非是一个整数,

注意:文本运算符的重载,需要符合约定的重载类型,其参数需要是指定的格式。

 

posted @ 2023-05-11 11:15  饼干`  阅读(31)  评论(0编辑  收藏  举报