tutorial sintaxis serie recursivos recursividad programacion indirecta ejemplos definicion algoritmos c++11 variables recursion folly

c++11 - sintaxis - Declaración de variables recursivas



serie fibonacci c++ (2)

Acabo de ver esta magia negra en la folly/ManualExecutor.h

TimePoint now_ = now_.min();

Después de grep''ed todo el código fuente de la biblioteca, no he visto una definición de la variable now_ cualquier otro lugar que no sea aquí. ¿Que esta pasando aqui? ¿Es esto efectivamente algún tipo de declaración de variable recursiva?



Ese código es más probable que sea igual a esto:

TimePoint now_ = TimePoint::min();

Eso significa que min() es un método estático, y llamarlo usando una instancia es lo mismo que llamarlo así, la instancia se usa solo para determinar el tipo. No se trata de magia negra, solo son dos sintaxis para hacer lo mismo.

En cuanto a por qué el código en cuestión compila: now_ ya está declarado por el lado izquierdo de la línea, por lo que cuando se usa para la inicialización en el lado derecho, el compilador ya conoce su tipo y puede llamar al método estático. Intentar llamar al método no estático debería dar un error (vea el comentario de @BenVoigt a continuación).

Como lo demuestra el hecho de que tuvo que escribir esta pregunta, la sintaxis en la pregunta no es la más clara. Puede ser tentador escribir el nombre largo, y tal vez sea justificable en las declaraciones de variables miembro con el inicializador (que es el código de la pregunta). En funciones internas del código, la forma auto de reducir la repetición es mejor.