c++11 - 递归变量声明

标签 c++11 variables recursion folly

我刚刚在 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/

相关文章:

c++ - 在 GYP 项目中使用 c++11

c++ - std::list 的循环迭代

Java 全局变量作用域

c - 从链表中删除某些数字(递归)

reactjs - 如何为嵌套子菜单创建键?

c++ - 读到 C++ 中的新行进入无限循环

c++ - 为什么是 some_statement;;;;在 C++ 中有效吗?

list - 如何在 Maxima 中将列表作为变量参数函数传递?

java - 创建变量数组

javascript - Node.js 上的事件相关递归