Вы в недоумении нестатические данные члены с вложенные псевдонимы типа члена.
Примеров нестатического элемента данных являются name
и age
в:
class person
{
public:
string name;
int age;
};
name
и age
хранения значений внутри конкретного экземпляра person
. Они имеют адрес в качестве Lvalue экземпляра 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
. Он не занимает память. Вы можете использовать его, чтобы создать string
:
person::name_type x = string{};
system_clock::time_point
тип псевдоним:
time_point<system_clock, system_clock::duration>
time_point::clock
тип псевдоним для Clock
в:
time_point<Clock, ...>
Итак, time_point<system_clock, system_clock::duration>::clock
является тот же тип, что и system_clock
.
system_clock
не хранит time_pont
. В самом деле, он вообще ничего не хранит (нестатические элементы данных).
time_point
не имеет часов в качестве нестатического элемента данных.time_point
хранит только duration
, который имеет тип второго параметра шаблона time_point
«s в:
template <class Clock, class Duration = typename Clock::duration>
class time_point;
Эти псевдонимы типа могут быть использованы следующим образом:
system_clock::time_point tp = system_clock::now();
Хотя использование auto
здесь намного проще (и мои предпочтения):
auto tp = system_clock::now();
Использование time_point::clock
может пригодиться, если у вас AG eneric time_point
и вам необходимо позвонить now()
для любой часы, которые time_point
измеряется:
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. Я также рекомендую прочитать части из <chrono>
предложения найти здесь:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2661.htm
комитет сам по себе нужен учебник по этой теме, и этот документ содержит довольно хороший. Пропустите части, содержащие предложенную формулировку, если вы не нуждаетесь в помощи для сна. Документ несколько устарел, поскольку несколько деталей изменились, но не так много. Одним из примеров является то, что monotonic_clock
с тех пор переименован в steady_clock
. Еще одна деталь заключается в том, что constexpr
с тех пор широко применяется. И пользовательские литералы с тех пор были добавлены к 6 конкретным типам продолжительности.
Наконец, Nicolai M. Josuttis' second edition of The C++ Standard Library - A Tutorial and Reference имеет хороший раздел на <chrono>
.
Реализация '' (или даже понимание его реализации) - очень амбициозный проект для новичка. :-) –
@ Howard Hinnant - я должен ... это часть кода в работе: -0 – sara8