用户自定义字面值,或者叫“自定义后缀”更直观些,主要作用是简化代码的读写。

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:用户定义字面量_字符串

根据 C++ 11 标准,只有下面参数列表才是合法的:

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 operator"" _len(char const * str, size_t size)
{
return size;
}

int main()
{
cout << "mike"_len <<endl; //结果为4

return 0;
}

运行结果如下:

C++11:用户定义字面量_C++11_02

对于参数char const *,应该被称为原始字面量 raw literal 操作符。例如:

char const * operator"" _r(char const* str)
{
return str;
}

int main()
{
cout << 250_r <<endl; //结果为250

return 0;
}

运行结果如下:

C++11:用户定义字面量_操作符_03