2016-03-18 20 views
7

関数の実行時間を測定するために、私は両方を使うことができます。しかし、<chrono><ctime>の違いは何ですか?私は別のものの代わりに1つを選ぶべきですか?<chrono>と<ctime>の違いは何ですか?

+3

秒とナノ秒近代的なユーザビリティと古典的な半使用性の比較 –

+4

40年後のイデオロギーの大幅な変化。 – user4581301

答えて

6

ctimeはCスタイルのヘッダーです。古く、タイプセーフではなく、chronoほど正確ではありません。 chronoはC++で推奨されるオプションです。現代的なC++ヘッダーであり、タイプセーフで、ハードウェアが可能な限り正確であり、機能を拡張しています。さらに重要なのは、C++ロジック(Cではなく)に従うロジックで、特定のものがより自然/現代の多くの言語機能(スレッド、例外など)を認識することが期待されるかもしれません - ctimeについては同じ仮定をすることはできません。それでも、ctime(またはtime.h)のユースケースがいくつかあります。いくつかのC APIと話をする必要があるときや、古いコードベースに依存しているときや、別の種類のロジックに従ったライブラリを使用するときなどです。 C++は実用的であり、いかなる点でも「純粋」ではないように設計されています。このため、ctimeと、古くなったすべてのヘッダ、構文、言語機能は、プログラマが使用しないようにしても、まだそこに残っています。

5

ctimeは古い学校です。その唯一の用途は、現在の時点からの日付取得(C++には適切な標準のdatetimeライブラリがないため)です。一般的な時間が必要な場合はchronoを使用してください。 system_clock::time_pointを日付/時刻にする必要がある場合は、ctimeを使用してください。

+3

なぜ 'ctime'が駄目なのか? –

+5

'ctime'よりも' system_clock :: time_point'をフィールドの日付/時刻構造に変えるより良い方法です:http://howardhinnant.github.io/date_v2.html :-) –

+4

@YeeLiu: 'ctime'はそうではありません"タイプセーフ"。例えば、 'difftime'は' duration'の代わりに 'double'を返します。また、 'tm.tm_sec'は' seconds'の代わりに 'int'型です。この型の安全性の欠如は、コンパイラが(例えば)時間単位で非論理代数を実行する論理エラーをチェックできないことを意味します。 –

関連する問題