文本运算符重载,分为数值文本运算符,和字符串文本运算符。
先看一下数值类型的文本运算符:
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个独立的字符,并非是一个整数,
注意:文本运算符的重载,需要符合约定的重载类型,其参数需要是指定的格式。
标签:val,auto,运算符,constexpr,重载,文本,size From: https://www.cnblogs.com/Super-biscuits/p/17390509.html