You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将std::chrono::high_resolution_clock::now()结果转为long?解决赋值相加报错问题

解决C++ chrono时间点赋值与相加的报错问题

嘿,我来帮你理清这个问题——你遇到的报错都是因为没搞清楚C++ chrono库中time_point和duration这两个核心类型的区别,咱们一步步解决:

为什么你的代码会报错?

先拆解下你遇到的两个错误:

  1. long t = t_start; 报错:t_start是std::chrono::time_point<std::chrono::high_resolution_clock>类型,它代表的是一个具体的时间点(比如从系统纪元开始的某个时刻),不是整数类型,自然不能直接赋值给long。
  2. t_start += t_end; 报错:两个时间点相加没有实际语义(就像“今天+明天”没有意义一样),chrono库根本不支持这种操作。你真正需要的应该是计算两个时间点的时间差,或者给时间点加上一段时间间隔。

正确的解决方案

1. 计算两个时间点的时间差(计时场景常用)

如果你是想统计一段代码的执行时间,正确的做法是计算t_end - t_start得到时间间隔(duration类型),再转换成你需要的单位(毫秒、微秒等),最后提取数值:

#include <chrono>

int main() {
    // 获取开始时间点
    auto t_start = std::chrono::high_resolution_clock::now();
    
    // 这里放你要计时的代码逻辑
    // ...
    
    // 获取结束时间点
    auto t_end = std::chrono::high_resolution_clock::now();
    
    // 计算时间差,转换成毫秒(可替换为microseconds、nanoseconds等)
    auto time_diff = std::chrono::duration_cast<std::chrono::milliseconds>(t_end - t_start);
    long elapsed_time = time_diff.count(); // 提取数值到long变量
    
    // 如果需要微秒精度:
    // auto time_diff_us = std::chrono::duration_cast<std::chrono::microseconds>(t_end - t_start);
    // long elapsed_time_us = time_diff_us.count();
    
    return 0;
}

2. 给时间点添加时间间隔(而非另一个时间点)

如果你想在某个时间点基础上增加一段时间(比如5秒),应该用time_point + duration的方式,而非两个时间点相加:

// 给t_start增加5秒,得到新的时间点
auto new_time_point = t_start + std::chrono::seconds(5);
// 也可以直接修改原时间点
t_start += std::chrono::milliseconds(100); // 增加100毫秒

3. (特殊场景)获取时间点的原始纪元数值

如果确实需要获取时间点对应的从系统纪元开始的原始数值(比如纳秒数),可以先转成duration再提取:

// 获取从纪元到t_start的时间间隔
auto epoch_duration = t_start.time_since_epoch();
// 转换成纳秒并提取数值(用long long避免溢出)
long long epoch_nanoseconds = std::chrono::duration_cast<std::chrono::nanoseconds>(epoch_duration).count();

不过这个操作一般只用于序列化、日志记录等特殊场景,日常计时用时间差就足够了。

内容的提问来源于stack exchange,提问作者Zeeshan Hayat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:36:29