这个 lambda 的目的是什么?
What's the purpose of this lambda?
我在C++代码中看到以下lambda。它的目的是什么?
static const auto faster = [](){
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
return nullptr;
}();
一个局部static
变量最多由执行其声明的第一个线程初始化一次。通过使用 lambda,我们可以利用这一事实最多运行一次任意代码。第一次到达声明时,到达声明的线程将执行 lambda 中的代码,作为初始化变量的一部分。变量的值可能没有实际使用,但程序会记住变量已被初始化,因此 lambda 不会第二次运行。
您通常会在幕后使用 C++ I/O 的在线评委提交的竞争性编程竞赛中看到此代码。为了提高提交的时钟运行时间,您可以解绑流并从标准 C 流中取消同步C++ IOStreams。使用 lambda 是一种在声明变量的位置立即执行代码的巧妙方法。为了获得此优化的全部效果,应将其放置在执行任何其他代码之前。
这称为即时调用的 Lambda (IIL(。
首先声明 lambda ([] () {...}
(,然后立即调用(调用((()
- 紧跟在 lambda 之后(。
这可以通过多种方式使用:
- 通过复杂的逻辑初始化常量变量
const auto v = [] () {
if (...) return X;
else return Y;
}
初始化具有复杂逻辑的静态变量
调用 IIL 为函数的参数创建值
auto x = foo(a, b, [c] () {return c > 42;} () );
因为静态变量- 是尽早初始化的,通过使用静态变量,其值将被忽略,但使用 IIL 初始化 - 它可用于在执行
main
之前执行操作。
相关文章:
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 这个表达是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 这个函数是什么意思(我的英语sry)
- 这个变量在 C++ 中的范围是什么?
- 这个Arduino睡眠设置的周边是什么警报功能?
- 这个 FOR-IF 循环的解释是什么?
- C++中这个声明的向量是什么意思
- 这个错误可能是什么?ANSI C文件
- 这个typedef和转换运算符语法是什么意思
- 是什么使这个以'+'开头的字符串添加成为有效的语句?
- 这个代码中的错误是什么,每次都会给我分段错误
- C++:是什么导致了这个堆栈粉碎错误?
- 这个循环是什么意思:for(j,0,np)
- 这个循环测试条件是什么意思?
- 是什么解释了这个片段中如此多的移动和破坏
- 这个 matlab 代码的C++等价物是什么(fread matlab vs fread C/C++)?
- 'note: 候選人: Volume& Volume::operator=(const Volume&)'.这个错误是什么?