递归å˜é‡å£°æ˜Ž

时间:2016-12-07 13:38:28

标签: c++11 variables recursion folly

我刚刚在folly/ManualExecutor.h

中看到了这个黑魔法
TimePoint now_ = now_.min();

在我查看整个库æºä»£ç ä¹‹åŽï¼Œæˆ‘还没有看到å˜é‡now_的定义。这里å‘生了什么?这实际上是æŸç§é€’å½’å˜é‡å£°æ˜Žå—?

2 个答案:

答案 0 :(得分:62)

该代ç å¾ˆå¯èƒ½ä¸Žæ­¤ç›¸åŒï¼š

TimePoint now_ = TimePoint::min();

è¿™æ„味ç€ï¼Œmin()是一个é™æ€æ–¹æ³•ï¼Œä½¿ç”¨å®žä¾‹è°ƒç”¨å®ƒä¸Žè°ƒç”¨å®ƒä¸€æ ·ï¼Œè¯¥å®žä¾‹ä»…用于确定类型。没有涉åŠé»‘魔法,这åªæ˜¯åšåŒæ ·äº‹æƒ…的两ç§è¯­æ³•ã€‚

至于为什么有问题的代ç ç¼–译:{{1​​}}å·²ç»åœ¨è¡Œçš„左侧声明,所以当它用于å³ä¾§çš„åˆå§‹åŒ–时,编译器已ç»çŸ¥é“它的类型并且能够调用é™æ€æ–¹æ³•ã€‚å°è¯•è°ƒç”¨éžé™æ€æ–¹æ³•åº”该会出错(请å‚阅下é¢@BenVoigt的评论)。

正如您必须撰写此问题所è¯æ˜Žçš„那样,问题中的语法并ä¸æ˜¯æœ€æ˜Žç¡®çš„。如果类型å称为long,则å¯èƒ½å¾ˆè¯±äººï¼Œå¹¶ä¸”在使用åˆå§‹åŒ–程åºï¼ˆé—®é¢˜ä»£ç ä¸ºï¼‰çš„æˆå‘˜å˜é‡å£°æ˜Žä¸­å¯èƒ½æ˜¯åˆç†çš„。在函数内部的代ç ä¸­ï¼Œnow_是å‡å°‘é‡å¤çš„更好方法。

答案 1 :(得分:14)

深入研究代ç æ˜¾ç¤ºTimePoint是chrono :: steady_clock :: time_point的别å,其中min()确实是一个返回最å°å…许æŒç»­æ—¶é—´çš„é™æ€æ–¹æ³•ï¼š

http://en.cppreference.com/w/cpp/chrono/time_point/min