C++11 的用户自定义字面量新特性
字面量
C++ 自带4种字面量:
- 整形
123
- 浮点型
12.3
- 字符
'1'
- 字符串
"123"
字面量又可添加后缀来表明具体类型:
- 无符号整形(
unsigned int
):123u
- 长整形(
long
):123l
在 C++03 中,我们可以定义一个浮点数height
1 | double height = 3.4 |
那么,痛点来了,此处的 height 的单位是什么呢?米?厘米?又或是英尺?
在面对此类问题时,如果我们能编写如下代码,事情就会简单许多:
1 | height = 3cm; |
用户自定义字面量
C++11允许用户自定义字面量后缀
1 | long double operator"" _cm(long double x) {return x * 10;} |
如果使用这种写法,_cm
, _m
, _mm
等函数将在运行时被调用,如果希望在编译时就调用字面量后缀函数,则需要把函数定义为 constexpr
,例如
1 | constexpr long double operator"" _cm(long double x) {return x * 10;} |
更进一步,我们甚至可以
1 | // 注意,如果这里要定义函数为 constexpr |
自定义字面量的限制
C++11 只允许字面量后缀函数的参数为以下类型,即整数,浮点以及字符串:
unsigned long long
long double
char const*
char const*, std::size_t
wchar_t const*, std::size_t
char16_t const*, std::size_t
char32_t const*, std::size_t
返回值则无类型限制