用户定义的字面量(user-defined literal)
- operator “” [suffix name], 举例:operator “” _b8();
- 可用于普通函数,也可用于模板函数
- 举个例子,实现八进制的字面量,编译时会计算出对应的整数值
// Example program
#include <iostream>
#include <string>
constexpr int ipow(int x, int n)
{
return n > 0 ? x * ipow(x, n - 1) : 1;
}
template <char a>
constexpr int b8_helper()
{
return a - '0';
}
template <char a, char b, char... tail>
constexpr int b8_helper()
{
return (int)(a - '0') * ipow(8, sizeof...(tail) + 1) + b8_helper<b, tail...>();
}
template <char... digits>
constexpr int operator"" _b8()
{
return b8_helper<digits...>();
}
int main()
{
int a = 2121474_b8;
std::cout << a << std::endl;
}
- 用户只能定义字面量后缀,而不能定义前缀
- 对于非整数的字符串字面量,需要加上双引号隔离后缀
- 用户定义的字面量后缀最好以下划线开头,标准库保留了所有不以下划线开头的后缀
- 对于普通函数,字面量的值会传递给参数;对于模板,则会传给模板参数