Подтвердить что ты не робот

Объявление рекурсивной переменной

Я только что видел эту черную магию в глупости /ManualExecutor.h

TimePoint now_ = now_.min();

После того, как я обработал весь исходный код библиотеки, я не видел определения переменной now_ где-либо еще, кроме здесь. Что здесь происходит? Является ли это фактически объявлением какой-либо рекурсивной переменной?

4b9b3361

Ответ 1

Этот код, скорее всего, равен этому:

TimePoint now_ = TimePoint::min();

Это означает, что min() является статическим методом, и вызов его с использованием экземпляра аналогичен вызову его, этот экземпляр используется только для определения типа. Никакой черной магии не было, это всего лишь два синтаксиса для того, чтобы делать то же самое.

Что касается компилируемого кода: now_ уже объявлен левой стороной строки, поэтому, когда он используется для инициализации с правой стороны, компилятор уже знает свой тип и может вызвать статический метод, Попытка вызова нестатического метода должна дать ошибку (см. Комментарий @BenVoigt ниже).

Как показал тот факт, что вам пришлось написать этот вопрос, синтаксис в вопросе не самый ясный. Может быть заманчиво, если имя типа long и, возможно, оправдано в объявлениях переменных-членов с инициализатором (который является кодом вопроса). Внутри внутренних функций кода auto - лучший способ уменьшить повторение.

Ответ 2

Копание в коде показывает, что TimePoint является псевдонимом для chrono:: stable_clock:: time_point, где min() действительно является статическим методом, который возвращает минимально допустимую продолжительность:

http://en.cppreference.com/w/cpp/chrono/time_point/min