用户自定义字面值,或者叫做“自定义后缀”更直观些,主要作用是简化代码的读写。
#include<iostream>
using namespace std;
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;
cout << 1.0_m << endl;
cout << 1.0_km << endl;
system("pause");
return 0;
}
运行结果如下:
根据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
最后四个对于字符串相当有用,因为第二个参数会自动推断为字符串的长度,例如:
size_t operator"" _len(char const *str, size_t size)
{
return size;
}
int main()
{
cout << "yff"_len << endl;
system("pause");
return 0;
}
运行结果如下:
对于参数char const *,应该被称为原始字面量操作符,例如:
char const *operator"" _r(char const *str)
{
return str;
}
int main()
{
cout << 520_r << endl;
cout << typeid(520_r).name() << endl;
system("pause");
return 0;
}
运行结果:
字面量的返回值并没有被严格限定,我们完全可以提供相容类型的返回值,例如
std::string operator"" _rs(char const* s)
{
return 'x' + std::string(s) + 'y';
}
int main()
{
std::cout << 5_rs << '\n';
system("pause");
return 0;
}