用户可通过下划线开头的自定义后缀定义字面量操作符,提升代码可读性与类型安全;需重载long double与unsigned long long版本,推荐使用constexpr,避免命名冲突。

在C++11及以后的标准中,用户可以通过定义字面量操作符来自定义字面量后缀,从而实现更直观、类型安全的常量表示方式。这种方式常用于时间、长度、货币等场景,提升代码可读性和类型安全性。
用户定义字面量通过在字面量后添加自定义后缀来触发特定函数。定义格式如下:
operator"" _suffix(参数)其中 _suffix 是你自定义的后缀名,参数类型决定字面量的原始类型:
假设我们想用 s 表示秒,ms 表示毫秒,并自动转换为一个Time类:
立即学习“C++免费学习笔记(深入)”;
#include <iostream>
class Time {
double milliseconds_;
public:
constexpr Time(double ms) : milliseconds_(ms) {}
double toSeconds() const { return milliseconds_ / 1000; }
void print() const { std::cout << milliseconds_ << " ms\n"; }
};
// 定义秒的字面量
constexpr Time operator"" _s(long double seconds) {
return Time(seconds 1000);
}
constexpr Time operator"" _s(unsigned long long seconds) {
return Time(seconds 1000);
}
// 定义毫秒的字面量
constexpr Time operator"" _ms(long double ms) {
return Time(ms);
}
constexpr Time operator"" _ms(unsigned long long ms) {
return Time(ms);
}
使用示例:
int main() {
auto t1 = 5.5_s; // 5.5秒 → 5500ms
auto t2 = 200_ms; // 200毫秒
t1.print(); // 输出: 5500 ms
t2.print(); // 输出: 200 ms
return 0;
}
用户定义字面量可用于多种场景:
12.5_km
3_m
"hello"_safe
3.0+4.0i
0b1010
1010_b
使用用户定义字面量时需注意:
_s
s
基本上就这些。自定义字面量虽小,但能显著提升代码表达力和类型安全。合理使用,可让接口更直观。
以上就是C++用户定义字面量 自定义后缀实现的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号