626 字
3 分钟
C++用户自定义字面量
C++11引入了用户自定义字面量(User-Defined Literals)的概念,允许开发者自定义字面量的后缀,以便于创建更直观、更符合特定领域需求的字面量。用户自定义字面量通过在常量后面添加特定的后缀来实现,这些后缀与相应的函数关联,这些函数负责将字面量转换为所需的类型。
用户自定义字面量的基本语法
用户自定义字面量是通过在标识符后面添加operator""后缀来定义的。例如:
long double operator"" _km(long double val) {
return val * 1000.0;
}
long double operator"" _m(long double val) {
return val;
}
long double operator"" _cm(long double val) {
return val / 100.0;
}在这个例子中,我们定义了三个用户自定义字面量后缀:_km、_m和_cm,它们分别用于表示千米、米和厘米。
使用用户自定义字面量
一旦定义了用户自定义字面量,就可以在代码中直接使用它们:
long double distance = 1.5_km; // 等同于 1500.0
long double length = 100_cm; // 等同于 1.0这样,代码的可读性得到了提高,因为字面量直接表达了其物理意义。
用户自定义字面量的类型
用户自定义字面量可以用于以下类型:
- 整型字面量:
unsigned long long - 浮点字面量:
long double - 字符串字面量:
const char* - 字符字面量:
char - C++11中还支持原始字符串字面量:
const char*例如,定义一个用于字符串字面量的自定义后缀:
std::string operator"" _hello(const char* str, size_t len) {
return std::string(str, len) + " hello";
}
int main() {
std::string greeting = "World"_hello; // 结果为 "World hello"
return 0;
}注意事项
- 用户自定义字面量函数必须是静态成员函数或全局函数。
- 字面量运算符函数不能有默认参数。
- 字符串字面量运算符函数必须接受两个参数:一个
const char*和一个size_t,后者表示字符串的长度。 - 用户自定义字面量可以提高代码的可读性和维护性,但应避免过度使用,以免造成混淆。
实际应用
用户自定义字面量在实际开发中可以用于多种场景,如单位转换、货币转换、字符串处理等。它们使得代码更加直观,减少了转换错误的可能性。
系统自带的字面量
auto str1 = "hello"_s;
// std::string
auto str2 = "hello";
// const char*
