C++11新标准中引入了用户自定义字面量,也叫自定义后缀操作符,即通过实现一个后缀操作符,将申明了该后缀标识的字面量转化为需要的类型

1
2
3
4
5
6
7
8
9
10
11
12
long double operator"" _mm(long double x) { return x / 1000; }
long double operator"" _m(long double x) { return x; }
long double operator"" _km(long double x) { return x * 1000; }

int main()
{
cout << 1.0_mm << endl; // 0.001
cout << 1.0_m << endl; // 1
cout << 1.0_km << endl; // 1000

return 0;
}

需要注意的是后缀操作符函数根据C++ 11 标准,只有下面参数列表才是合法的:

1
2
3
4
5
6
7
char const *
unsigned long long
long double
char const *, size_t
wchar_t const *, size_t
char16_t const *, size_t
char32_t const *, size_t

最后四个对于字符串相当有用,因为第二个参数会自动推断为字符串的长度