最近刷题喜欢用闭包把函数全部写到main中,通常一个函数可以这样:
1 | function<int(int)> f = [](int x) { return x; }; |
但是在闭包[]中可以添加=或&两个运算符,查过cpp reference后,这个叫capture(捕获),即使用闭包外的变量的方式。讨论这两个运算符:
[=](){}:这是对闭包外变量进行const引用的形式,即不允许修改闭包外的变量。
1 | int x = 5; |
这段代码编译会报错,因为=捕获不允许修改外变量。
[&](){}:这是对闭包外变量进行引用的形式,可以修改闭包外的变量,并且保留为修改后的值。
1 | int x = 5; |
而这段代码会输出4,因为闭包捕获到外部变量后将其修改并保留。
除此之外,还可以声明特定变量使用特定的捕获方式:
1 | [a,&b]。将a按值进行传递,b按引用进行传递。 |