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 longlong doublechar const*char const*, std::size_twchar_t const*, std::size_tchar16_t const*, std::size_tchar32_t const*, std::size_t
返回值则无类型限制