Подтвердить что ты не робот

Std:: chrono и cout

У меня есть глупая проблема. Я пытаюсь переключиться на заголовки С++ 11, и один из них - хронограф. Но моя проблема в том, что я не могу выполнить результат операций времени. Например:

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

дает:

инициализирующий аргумент 1 из ‘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();

дает недопустимый листинг

4b9b3361

Ответ 2

Как отмечали другие, вы можете вызвать функцию члена count(), чтобы получить внутренний счет.

Я хотел добавить, что я пытаюсь добавить новый заголовок: <chrono_io> в эту библиотеку. Здесь описано здесь. Основным преимуществом <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

Ответ 3

Не уверен, чего вы ожидаете от этого актера, возможно, вы хотели t.time_since_epoch().count()?

Ответ 4

Если вам требуется синхронизация в разрешении миллисекунд, вы можете это сделать:

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()
    << " milliseconds\n";

Не забудьте добавить среди включенных заголовков:

#include <chrono> //timing