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?
Al acceder al código se muestra que TimePoint es un alias para chrono :: steady_clock :: time_point, donde min () es de hecho un método estático que devuelve la duración mínima permitida:
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.