用户定义字面量是C++11引入的特性,通过operator""后缀函数将带自定义后缀的字面量(如123_km、3.14_rad、“hello”_sv)转换为指定类型或执行逻辑,提升代码语义性与安全性。

用户定义字面量(User-defined Literals)是 C++11 引入的特性,允许你为字面量添加自定义后缀,从而让编译器在编译期或运行期将其转换为自定义类型或执行特定逻辑。核心是通过定义特殊的 字面量运算符函数(literal operator),比如 operator"" _km。
基本语法:定义一个后缀函数
必须以 operator"" 开头,后面紧跟自定义后缀名(如 _s、_mb、_deg),函数参数取决于字面量类型:
- 整数字面量(如
123_km)→ 参数为unsigned long long - 浮点字面量(如
3.14_rad)→ 参数为long double - 字符/字符串字面量(如
"hello"_sv)→ 参数为const char*和size_t - 单个字符(如
'a'_tag)→ 参数为char
示例:定义距离单位后缀 _km 和 _mi
struct Distance {
double km;
Distance(double k) : km(k) {}
};
<p>Distance operator"" _km(long double x) {
return Distance(static_cast<double>(x));
}</p><p>Distance operator"" _mi(long double x) {
return Distance(static_cast<double>(x) * 1.609344); // 英里转公里
}</p><p>// 使用
auto d1 = 5.5_km; // Distance{5.5}
auto d2 = 10.0_mi; // Distance{16.09344}
登录后复制
字符串字面量后缀:支持编译期字符串处理
适用于需要在编译期解析字符串的场景(如自定义字符串视图、正则编译、单位解析等)。注意:C++14 起支持 constexpr 字符串字面量运算符,但需满足常量表达式约束。
立即学习“C++免费学习笔记(深入)”;
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~