2015-01-09 14 views
6

私は<chrono>ライブラリを学習しており、std::chrono::durationクラスを考慮して、数秒でベースする特別な理由はありますか?秒にしていない分、時間の基本時間に何らかの理由があるたとえば秒を格納する変数はなぜstd :: chrono :: durationが秒に基づいているのですか

chrono::duration<int> two_seconds(2); 

だろうし、他のすべての時間のスパンは

chrono::duration<int, ratio<60>> two_minutes(2); 
chrono::duration<int, ratio<1, 1000>> two_milliseconds(2); 
chrono::duration<int, ratio<60 * 60 * 24>> two_days(2); 

のように、秒にそれらを関連付ける必要など?

+5

秒は、継続時間値のための物理的な拠点です。これが理由だろうか? –

+4

他のユニットであれば、対応する質問をしたでしょうか? –

+1

整数値と比率(積分値)として格納されるため、* something *に基づいている必要があります。ベースユニットとして他に何をお勧めしますか?秒は[SI単位](http://en.wikipedia.org/wiki/International_System_of_Units#Base_units)のため、最も自然です。 – leemes

答えて

31

秒はSIシステムと科学全体の基本時間単位であるため、秒が選択されます。
アメリカ人でも秒を使用していますが、microfortnightsのようなものではありません。

この基本的なタイムスパンが持続クラス

のための別のテンプレートパラメータではありません、なぜそれはあなたが比ためtypedef Sを提供できるよう、であり、いくつかは、標準に含まれています。

#include <chrono> 

std::chrono::duration<int, minutes> two_minutes(2);   // Standard 
std::chrono::duration<int, milliseconds> two_milliseconds(2); // Standard 

あなたがより多くを必要とする場合、彼らは追加するのは簡単だ:

typedef std::ratio<60 * 60 * 24> days; 
typedef std::ratio<756, 625> microfortnights; 

std::chrono::duration<int, days> two_days(2); 
std::chrono::duration<int, microfortnights> two_weeks(1000000); 
+35

「アメリカ人でも秒を使用していますが、マイクロフォルトナイトのようなものではありません。 +1そのために: – DarkWanderer

+0

標準はすでに 'std :: chrono :: milliseconds'のようなものを含んでいます。 [このページ](http://en.cppreference.com/w/cpp/chrono/duration)の「Helper Types」というセクションを参照してください。 – Steve

+0

@ Steve Oops、私はチェックして、OPの言葉を取ってはいけませんでした。 – molbdnilo

関連する問題