c++ - std::chrono 和 cout

标签 c++ time c++11 chrono

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

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

给予:

initializing argument 1 of ‘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> >]’ ... /usr/include/c++/4.6/ostream

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

给出无效的类型转换

最佳答案

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

我想补充一下,我正在尝试添加一个新标题: <chrono_io> 到这个图书馆。它记录在here . <chrono_io>的主要优势|仅使用 count()是为您打印出编译时单元。这些信息当然可以手动获取,但只为您提供库要容易得多。

对我来说,你的例子:

#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> , 和 1 个来源: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

关于c++ - std::chrono 和 cout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7889136/

相关文章:

php - 如果时间和日期早于 php

ruby - ruby 中的时间操作

c++ - 我怎么能给c++ vector赋值

c++ - Visual C++ 中的外部模板是否存在错误?

c++ - 在静态常量成员数组中将 char 类型转换为字符串

c++ - 在 QT 应用程序(VS 插件)中使用 QcustomPlot 基本代码停止工作程序

visual-studio - 我在 VS 项目上工作了多久?

c++ - 使用 Crypto++ 的 curve25519 基点乘法

c++ - 将包含非 ASCII 字符的字节数组转换为字符串

c++ - 2个操作数的产品类型