web-dev-qa-db-ja.com

std :: chronoおよびcout

愚かな問題があります。私はc ++ 11ヘッダーに切り替えようとしましたが、そのうちの1つはクロノです。しかし、私の問題は、時間操作の結果を把握できないことです。例えば:

_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> >]’ ... /usr/include/c++/4.6/ostreamの引数1を初期化しています

_cout<<(uint64_t)t.time_since_Epoch();
_

無効なキャストを与える

30
NoSenseEtAl

簡単なGoogle検索でこのページが見つかりました: http://en.cppreference.com/w/cpp/chrono/duration で、期間の印刷の例を見つけることができます。

編集: http://en.cppreference.com/w/cpp/chrono/duration/duration_cast に移動しました

22

他の人が指摘したように、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
_

これを行うためのソースコードはオープンソースであり、上記のリンクから入手できます。これは、2つのヘッダーで構成されます:_<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
_
38
Howard Hinnant

ミリ秒の解像度でタイミングを取りたい場合は、次のようにします。

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
9
Yonatan Simson

このキャストから何を期待しているかわからない、多分あなたはt.time_since_Epoch().count()が欲しかった?