我刚刚在 folly/ManualExecutor.h 看到了这个黑魔法
TimePoint now_ = now_.min();
在我grep了整个库源代码之后,我还没有看到变量
now_
的定义除了这里以外的任何地方。这里发生了什么事?这实际上是某种递归变量声明吗?
最佳答案
该代码很可能等于:
TimePoint now_ = TimePoint::min();
这意味着,
min()
是一个静态方法,使用实例调用它和这样调用它是一样的,实例只是用于确定类型。不涉及黑魔法,这只是做同一件事的两种语法。至于为什么有问题的代码编译:
now_
行的左侧已经声明了,所以当它用于右侧的初始化时,编译器已经知道它的类型并且能够调用静态方法。尝试调用非静态方法应该会出错(请参阅下面@BenVoigt 的评论)。正如您必须编写此问题这一事实所证明的那样,问题中的语法并不是最清楚的。如果类型名称很长,这可能很诱人,并且在带有初始值设定项(问题代码是)的成员变量声明中可能是合理的。在函数内部的代码中,
auto
是减少重复的更好方法。
关于c++11 - 递归变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41018973/