【发布时间】:2020-04-06 09:45:15
【问题描述】:
在解决 Leetcode 问题时,我遇到了一个问题解决方案(通常我们只能访问解决方案类,而不是主类),我在类声明和定义之后找到了这个语句。我熟悉cin.tiesync_with_stdio 等内部内容。但是auto speedup 和[](){//}() 是做什么的。它是一个自执行功能。任何帮助将不胜感激。
auto speedup=[](){
std::ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
return nullptr;
}();
提前致谢。
【问题讨论】:
-
这是一个lambda expression,在声明后立即调用(因此是最终的
())。但是为什么有人会做这样的事情而不是在父范围内执行这些行 - 我不知道。 -
@Yksisarvinen - 有人试图证明他们比其他开发人员更聪明,但失败了。
-
明白。谢谢您的帮助。因为 Web Ide 不允许访问
main()。因为它在声明之后立即被调用,所以它在 main 的任何行被执行之前被执行。 -
@Yksisarvinen 我认为这是在主程序执行之前的静态初始化时间进行一些处理。您不能将任何不是声明的语句放在全局范围内,因此这实际上是一种无需外部调用即可进行复杂初始化的优雅方式。