Std::计时和计数

std::chrono and cout

本文关键字:Std      更新时间:2023-10-16

我有一个愚蠢的问题。我尝试切换到c++11头文件,其中之一是chrono。但我的问题是我不能计算时间运算的结果。例如:

auto t=std::chrono::high_resolution_clock::now();
cout<<t.time_since_epoch();

给:

初始化‘std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char, _Traits = std::char_traits<char>, _Tp = std::chrono::duration<long int, std::ratio<1l, 1000000l> >]’的参数1…/usr/include/c + +/4.6/上ostream

cout<<(uint64_t)t.time_since_epoch();

给出无效的强制转换

正如其他人所注意到的,您可以调用count()成员函数来获取内部计数。

我想添加,我正在尝试添加一个新的头:<chrono_io>到这个库。这里记录了它。与只使用count()相比,<chrono_io>的主要优点是编译时单元为您打印出来。这些信息当然可以手工获取,但是直接让库为您提供这些信息要容易得多。

对我来说,你的例子:

#include <iostream>
#include <chrono_io>
int main()
{
    auto t = std::chrono::high_resolution_clock::now();
    std::cout << t.time_since_epoch() << 'n';
}

输出:

147901305796958 nanoseconds

执行此操作的源代码是开源的,可以在上面的链接中获得。它包括两个头:<ratio_io><chrono_io>,以及一个源:chrono_io.cpp

这个代码应该被认为是实验性的。它不是标准的,而且几乎肯定不会被标准化。事实上,来自LWG的初步评论表明,他们更喜欢默认的输出是该软件所称的"短格式"。这个可选输出可以通过以下命令获得:

std::cout << std::chrono::duration_fmt(std::chrono::symbol)
          << t.time_since_epoch() << 'n';

和输出:

147901305796958 ns

更新

只花了十年时间,但c++ 20现在做到了:

#include <chrono>
#include <iostream>
int main()
{
    auto t = std::chrono::high_resolution_clock::now();
    std::cout << t.time_since_epoch() << 'n';
}
输出:

147901305796958ns

在google上快速搜索一下,找到了这个页面:http://en.cppreference.com/w/cpp/chrono/duration,在那里你可以找到一个打印持续时间的例子。

编辑:它被移动到http://en.cppreference.com/w/cpp/chrono/duration/duration_cast

如果你想以毫秒为单位计时,你可以这样做:

auto t1 = std::chrono::high_resolution_clock::now();
//process to be timed
auto t2 = std::chrono::high_resolution_clock::now();
std::cout << "process took: "
    << std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count()
    << " millisecondsn";

不要忘记在包含的标头中添加:

#include <chrono> //timing

不确定你对这个角色有什么期望,也许你想要t.time_since_epoch().count() ?

相关文章:
  • 没有找到相关文章