【问题标题】:C++ Auto Executing Function?C ++自动执行功能?
【发布时间】: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 我认为这是在主程序执行之前的静态初始化时间进行一些处理。您不能将任何不是声明的语句放在全局范围内,因此这实际上是一种无需外部调用即可进行复杂初始化的优雅方式。

标签: c++ c++11 c++14 c++17


【解决方案1】:

从 [] 到 } 是一个 lambda 表达式,也称为匿名函数。它是在 C++11 中引入的。它计算一个指向不带参数的函数的指针,并执行给定函数体中的代码,然后返回 nullptr。

该语句正在调用此 lambda 函数并将其返回值置于加速中。由于 lambda 表达式没有给出明确的返回类型,我很确定返回类型以及加速变量的类型是 nullptr_t。

【讨论】:

  • 是的,我明白了,谢谢。
猜你喜欢
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多