非スタティックデータメンバーとのネストされたメンバータイプの別名を混同しています。 person
の特定のインスタンス内部
class person
{
public:
string name;
int age;
};
name
とage
格納値:非静的データメンバの
例はname
とage
あります。彼らはあなたがそのアドレスが何であるかを知ることができますperson
の左辺値インスタンスのアドレスを持っている:
person p;
string* np = &p.name; // this is where p.name lives in memory
ネストされたタイプの別名は、ストレージを占有しません。例えば:
class person
{
public:
using name_type = string;
string name;
int age;
};
person::name_type
はstring
の型の別名です。ストレージを占有しません。
time_point<system_clock, system_clock::duration>
time_point::clock
がでClock
の型の別名である:
person::name_type x = string{};
system_clock::time_point
を行うタイプの別名である:だから
time_point<Clock, ...>
、time_point<system_clock, system_clock::duration>::clock
があるあなたはstring
作成するためにそれを使用することができますsystem_clock
と同じタイプです。
system_clock
は、time_pont
を保存しません。実際には、何も格納しません(非静的データメンバーはありません)。
time_point
は、非静的データメンバーとしてのクロックを持っていません。time_point
だけでtime_point
の第2のテンプレートパラメータの型を持つduration
格納します。ここでauto
の使用は非常に簡単ですが
system_clock::time_point tp = system_clock::now();
:これらの型の別名は次のように使用される可能性があります
template <class Clock, class Duration = typename Clock::duration>
class time_point;
を(と私の好み):あなたはAGがあった場合
は
auto tp = system_clock::now();
time_point::clock
の利用が便利になるかもしれませんtime_point
enericとあなたがtime_point
を用いて測定していることを何でもクロック用now()
を呼び出すために必要な:
template <class TimePoint>
void some_function(TimePoint tp)
{
using Clock = typename TimePoint::clock;
auto now = Clock::now();
...
この後者のユースケースは、よりまれですが、あなたがそれを必要とする場合の機能があります。
一般に、<chrono>
について学ぶとき、ほとんどの人はチュートリアルのような情報を読んだり、サンプルコードを見たり、それに関する他のスタックオーバーフローの質問を読んだほうが良いでしょう。人々がその実装を研究することによって<chrono>
について学ぶことを試みるとき、彼らは常に比較的複雑な実装に対して強い否定的な反応を持っています。
この実装は、timespec
などの代替品よりはるかに強力であるため、比較的複雑です。しかし、一般的な日常的な使用には、非常に簡単で安全な構文があります。一般的な使用例では、すべてがテンプレート化されていることを知る必要はありません。 system_clock::now()
、nanoseconds
、hours
のようなものを使用できます。
[chrono]-taggedの質問の一部を読むことをお勧めします。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2661.htm
自体が、このテーマに関するチュートリアルを必要に応じて委員会、およびこの論文はかなり良いものが含まれています。私はまた<chrono>
提案のがここで見つけるの部分を読むことをお勧めします。あなたが睡眠補助を必要としていない限り、提案された言葉を含む部分はスキップしてください。いくつかの詳細は変更されているが、多くは変更されていないという点で、このペーパーは幾分日付が付けられている。 1つの例は、monotonic_clock
がその後steady_clock
に名前が変更されたことです。もう1つの詳細は、以来constexpr
が広く適用されているということです。ユーザー定義のリテラルは6つの具体的な継続時間タイプに追加されています。
最後に、Nicolai M. Josuttis' second edition of The C++ Standard Library - A Tutorial and Referenceは<chrono>
という素晴らしいセクションを持っています。
「」(または実装の理解さえも)を実装することは、初心者にとって非常に野心的なプロジェクトです。 :-) –
@ Howard Hinnant-私は....仕事のコードの一部です。 – sara8