Ответ 1
Этот код, скорее всего, равен этому:
TimePoint now_ = TimePoint::min();
Это означает, что min()
является статическим методом, и вызов его с использованием экземпляра аналогичен вызову его, этот экземпляр используется только для определения типа. Никакой черной магии не было, это всего лишь два синтаксиса для того, чтобы делать то же самое.
Что касается компилируемого кода: now_
уже объявлен левой стороной строки, поэтому, когда он используется для инициализации с правой стороны, компилятор уже знает свой тип и может вызвать статический метод, Попытка вызова нестатического метода должна дать ошибку (см. Комментарий @BenVoigt ниже).
Как показал тот факт, что вам пришлось написать этот вопрос, синтаксис в вопросе не самый ясный. Может быть заманчиво, если имя типа long и, возможно, оправдано в объявлениях переменных-членов с инициализатором (который является кодом вопроса). Внутри внутренних функций кода auto
- лучший способ уменьшить повторение.