首页 > 解决方案 > 如何将 std::chrono::high_resolution 类型转换为浮点类型?

问题描述

我想转换std::chrono::high_resolution_clock start为浮点类型。我尝试使用 static_cast 但我仍然不断收到一个编译错误,上面写着

invalid static_cast from type 'std::chrono::_V2::system_clock::time_point {aka std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long long int, std::ratio<1ll, 1000000000ll> > >}' to type 'float'
     float duration = static_cast<float>(start) + static_cast<float>(ms);

invalid static_cast from type 'std::chrono::milliseconds {aka std::chrono::duration<long long int, std::ratio<1ll, 1000ll> >}' to type 'float'
     float duration = static_cast<float>(start) + static_cast<float>(ms);

代码:

std::chrono::milliseconds ms(5000);
std::chrono::high_resolution_clock::time_point start = std::chrono::high_resolution_clock::now();
float duration = static_cast<float>(start) + static_cast<float>(ms);

标签: c++

解决方案


你不能time_point像那样施放 s 来获得持续时间。试试这个:

std::chrono::steady_clock::time_point start = std::chrono::steady_clock::now();
std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();

float dur_seconds = std::chrono::duration<float>(end - start).count();

如果您想以秒以外的时间获得持续时间,则需要提供比率,例如std::milli

float dur_milli = std::chrono::duration<float, std::milli>(end - start).count();

std::cout << "time spent: " << dur_seconds << " seconds\n";
std::cout << "time spent: " << dur_milli << " milliseconds\n";

推荐阅读