gpt4 book ai didi

c++ - 使用 std::chrono::high_resolution_clock 时不匹配 "operator ="

转载 作者:搜寻专家 更新时间:2023-10-31 00:54:39 27 4
gpt4 key购买 nike

当我在下面编译这个timer.hpp 头文件时,编译器说:

error: no match for ‘operator=’ (operand types are ‘std::chrono::_V2::system_clock::time_point {aka std::chrono::time_point > >}’ and ‘std::__success_type > >::type {aka std::chrono::duration >}’) end = std::chrono::high_resolution_clock::now() - start;

我猜开始和结束的变量类型是错误的。什么是正确的类型?我想使用 std::chrono::high_resolution_clock

#include <chrono>

namespace timer{
static std::chrono::system_clock::time_point start, end;

void initTime(){
start = std::chrono::high_resolution_clock::now();
}


void endTime(){
end = std::chrono::high_resolution_clock::now() - start;
}

}

timer.hpp 应该与一些主文件一起使用。
通过在我想测量的某个函数之前调用 timer::initTime() 并在函数之后调用 timer::endTime() ,我会得到计时结果(这里省略了持续时间的 setter/getter )。

最佳答案

这段代码有两个问题:

static std::chrono::system_clock::time_point start, end;
/* ... */

void endTime(){
end = std::chrono::high_resolution_clock::now() - start;
}

您将 end 声明为一个时间点,但随后在赋值运算符的右侧,您要减去两个时间点(now()start),并赋值给end

逻辑上,如果你减去两个time points ,您没有获得新的时间点。例如,如果我想减去“今天 08:15:00”-“今天 08:05:00”,将结果描述为“今天 00:10:00”是没有意义的。相反,C++ chrono 库有一个 duration class template ;它旨在表示时间长度(例如,两个时间点之间的差异)。

请参阅此处的 operator - 重载编号 4: http://en.cppreference.com/w/cpp/chrono/time_point/operator_arith2

我建议观看@Howard Hinnant 上面链接的教程视频...... Hinnant 先生参与了 std::chronoboost::chrono 的开发图书馆。

潜在的第二个问题是 start 的类型是 std::chrono::system_clock::time_point,这可能是不同的类型(不同的时钟)与 std::chrono::high_resolution_clock::now() 返回的类型(类型为 std::chrono::high_resolution_clock::time_point) .

关于c++ - 使用 std::chrono::high_resolution_clock 时不匹配 "operator =",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44703801/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com