FCR*_*FCR 44 variables recursion c++11 folly
我刚刚在愚蠢/ ManualExecutor.h中看到了这个黑魔法
TimePoint now_ = now_.min();
Run Code Online (Sandbox Code Playgroud)
在我对整个库源代码进行grep之后,我还没有看到now_除此处之外的其他任何变量的定义.这里发生了什么事?这实际上是某种递归变量声明吗?
hyd*_*yde 62
该代码很可能与此相同:
TimePoint now_ = TimePoint::min();
Run Code Online (Sandbox Code Playgroud)
这意味着,min()是一个静态方法,并使用实例调用它与调用它是相同的,该实例仅用于确定类型.没有涉及黑魔法,这只是做同样事情的两种语法.
至于为什么有问题的代码编译:now_已经在行的左侧声明了,所以当它用于右侧的初始化时,编译器已经知道它的类型并且能够调用静态方法.尝试调用非静态方法应该会出错(请参阅下面@BenVoigt的注释).
正如您必须编写此问题所证明的那样,问题中的语法并不是最明确的.如果类型名称为long,则可能很诱人,并且在使用初始化程序(问题代码为)的成员变量声明中可能是合理的.在函数内部的代码中,auto是减少重复的更好方法.
Mik*_*l F 14
深入研究代码显示TimePoint是chrono :: steady_clock :: time_point的别名,其中min()确实是一个返回最小允许持续时间的静态方法:
http://en.cppreference.com/w/cpp/chrono/time_point/min