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

使用C++ chrono计时,输出time_since_epoch结果编译报错求助

解决C++中std::chrono::duration无法直接输出的问题

问题核心是:std::chrono::high_resolution_clock::now().time_since_epoch()返回的std::chrono::duration类型,C++标准库未提供默认的std::ostream输出重载,因此cout无法直接处理该类型对象。

以下是几种可行的修复方案:

1. 转换为具体时间单位的计数值输出

通过duration_cast将duration转换为目标时间单位(如微秒、毫秒),再调用count()获取数值输出:

#include <chrono>
#include <iostream>

int main()
{
    auto t = std::chrono::high_resolution_clock::now();
    auto since_epoch = t.time_since_epoch();
    
    // 输出纳秒(high_resolution_clock默认精度)
    std::cout << since_epoch.count() << " nanoseconds\n";
    
    // 转换为微秒输出
    std::cout << std::chrono::duration_cast<std::chrono::microseconds>(since_epoch).count() << " microseconds\n";
    
    // 转换为毫秒输出
    std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(since_epoch).count() << " milliseconds\n";
}

count()返回整数类型,可被cout直接输出;duration_cast用于不同时间单位的转换,按需选择即可。

2. 自定义ostream重载实现通用输出

若需频繁输出duration,可自定义operator<<让cout支持直接打印任意duration类型:

#include <chrono>
#include <iostream>

// 模板重载,适配所有duration类型
template<typename Rep, typename Period>
std::ostream& operator<<(std::ostream& os, const std::chrono::duration<Rep, Period>& d)
{
    // 转换为秒并保留小数,提升可读性
    using Seconds = std::chrono::duration<double>;
    return os << std::chrono::duration_cast<Seconds>(d).count() << " seconds";
}

int main()
{
    auto t = std::chrono::high_resolution_clock::now();
    std::cout << t.time_since_epoch() << '\n';
}

之后直接使用cout << duration即可输出格式化后的时间。

3. 用C++20的std::format原生支持(推荐)

C++20的std::format原生支持chrono类型格式化输出,无需额外处理:

#include <chrono>
#include <iostream>
#include <format>

int main()
{
    auto t = std::chrono::high_resolution_clock::now();
    std::cout << std::format("{}\n", t.time_since_epoch());
}

注意:使用libc++编译时,部分版本需添加-fexperimental-library启用实验特性,编译命令改为:

clang++ -std=c++20 -stdlib=libc++ -fexperimental-library test3.cpp -o test5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:55:12