如何累加两个C++ chrono duration?函数计时求和编译报错求助
问题解决:C++ chrono库统计函数总耗时编译错误
先看你代码里的两个核心问题:
类型定义错误:你写的
static duration<microseconds> full_exec_time{};完全搞错了用法。microseconds本身就是std::chrono::duration的特化类型(等价于std::chrono::duration<long long, std::micro>),不能把它当作duration模板的参数来用。正确的写法是直接用std::chrono::microseconds定义总耗时变量。语法笔误:
auto start_time = high_resolution_clock::now():末尾的冒号要改成分号。
修正后的完整代码:
#include <chrono> int foo() { // 直接用microseconds类型,而非错误的duration<microseconds> static std::chrono::microseconds full_exec_time{}; auto start_time = std::chrono::high_resolution_clock::now(); // 函数业务逻辑 // do a bunch of stuff auto stop_time = std::chrono::high_resolution_clock::now(); auto exec_time = std::chrono::duration_cast<std::chrono::microseconds>(stop_time - start_time); full_exec_time += exec_time; // 现在类型完全匹配,可正常累加 // 若需要查看总耗时,可在合适时机调用count()获取数值 // 例如:std::cout << "Total execution time: " << full_exec_time.count() << " microseconds\n"; return 0; }
额外说明:
- 所有chrono库的类型都要加上
std::chrono::命名空间(如果嫌麻烦可以在函数内加using namespace std::chrono;简化,但不建议在头文件中使用)。 - 用
static修饰full_exec_time是正确的,确保每次调用foo时都会累加同一个变量,不会被重新初始化。 - 如果需要更高精度的计时(比如纳秒),只需把
microseconds替换为nanoseconds,同时调整duration_cast的目标类型即可。
内容的提问来源于stack exchange,提问作者bob.sacamento
相关产品推荐
相关产品推荐

