type
status
date
slug
summary
tags
category
icon
password
Email
文章首发于我的个人博客:欢迎大佬们来逛逛
引入
也许你会有这样的想法:如果能在某个数字的后面加个小尾巴就好了,比如:
- 1cm:代表1厘米
- 1m:代表1米
- 1h:代表1小时
- …
实际上C++已经给出了我们有关时间的表示:
需要包含以下的头文件
chrono
就是一个时间库如果我们想要知道能在后面加上小尾巴的原因是什么,我们可以查看其源码:
我们可以发现:
- h:
operator"" h
- min:
operator"" min
- 对于其他的也是类似。
通过这个方法我们就可以为我们的变量加上一个小尾巴,注意一定是字面量才有效。
如何定义我们自己的字面量呢?
语法
operator”” 用户自定义符号
即:
- operator””_z:
1_z
- operator””_houzhui:
12323_houzhui
我们一定要在
””
的后面加上一个 _
因为不加下划线的是系统保留的,例如上面的时间等。所以我们用户自定义时一定要加上一个
_
然后后面加上修饰的文本内容。这是一个最简单的字面值运算符的函数:
- 使用:auto af = 3.1415_f;
- 使用:auto as = 12_fs;
- 使用:auto str = "ylhwoaini"_S;
- 使用:12345_println;
规则
字面量运算符函数的参数一定要遵循下面的几种方法。
简单来说:
- 整数:
unsigned long long
- 浮点数:
long double
- 字符串:
const char* str,std::size_t
- 字符:
char
- 备用方式:
const char*

注意字符串的类型一定是这两个参数的方式,如果我们使用const char* 类型的参数,则出现报错:
一个参数的const char* 是浮点或者整数的备用情况。
如果存在unsigned long long则优先匹配整数;如果存在 long double,则优先匹配浮点数,如果都不存在,则使用const char* 版本。
示例
角度转换为弧度
使用constexpr可以在编译时确定。
std::numbers::pi
在<numbers>库中直接 打印
我们采用:123_println的方式直接打印,则返回类型是
void
类型字面值运算符可以进行重载。
下面是针对常用类型的特化。

翻倍
使用这种方法来实现对一个string的翻倍:
有趣的是多个字符串还可以进行拼接:
相当于 “ylhylh”_s2,前一个的
_s2
可以省略参考自:
- 作者:Yuleo
- 链接:https://www.helloylh.com/article/57b97ad8-0231-43cc-92cf-1bd05125695d
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。