C++26 std::chrono 哈希与 SI 词头详解
📅 2026/7/6 3:11:14
👁️ 阅读次数
📝 编程学习
C++26 std::chrono 哈希与 SI 词头详解
本文是「C++26 新特性单篇精讲」系列之一。文末可跳转完整合订本。
一、是什么
C++26 对<chrono>做了两项改进:
- 为
time_point、duration、zoned_time等类型提供std::hash特化; - 新增 SI 词头:
std::quecto、std::ronto、std::ronna、std::quetta(10⁻³⁰ 到 10³⁰)。
二、为什么需要它
C++20 引入的 chrono 日历和时区功能强大,但无法直接放入unordered_map/unordered_set。C++26 补齐了哈希支持。
三、完整代码示例
3.1 chrono 哈希
#include<chrono>#include<unordered_map>#include<string>intmain(){std::unordered_map<std::chrono::system_clock::time_point,std::string>events;events[std::chrono::system_clock::now()]="start";events[std::chrono::system_clock::now()+std::chrono::hours{1}]="end";}3.2 新 SI 词头
#include<chrono>#include<print>intmain(){autoq=1.0*std::chrono::quetta;// 10^30autor=1.0*std::chrono::quecto;// 10^-30std::println("{} s",q.count());}四、编译器支持与特性测试宏
| 编译器 | 版本 |
|---|---|
| GCC | 16+ |
| Clang | — |
| MSVC | — |
#if__cpp_lib_chrono>=202306L// chrono 哈希可用#endif五、常见陷阱
- 时区数据依赖 IANA 数据库:
zoned_time哈希需要时区数据正确安装; - 浮点 duration 精度:大词头可能导致浮点精度损失;
- 哈希冲突:不同时间点可能哈希冲突,仍需用
==比较。
六、小结
chrono 哈希支持让时间类型可以像普通键一样使用。新 SI 词头则服务于极端尺度的科学计量场景。
- 返回 C++26 新特性全景合订本: C++26 新特性全景解析
- C/C++ 后台架构学习社区,欢迎关注:https://github.com/0voice
本文基于 C++26 已批准特性撰写,具体实现以编译器文档为准。
编程学习
技术分享
实战经验