谁能给我看以下示例:
1) 按值捕获 x
的 Lambda。 y
引用。如果未指定,其余部分的默认设置是什么?
2) 按值捕获 x
的 Lambda。 y
引用,其他的都是值。
3) 按值捕获 x
的 Lambda。 y
引用,其他所有引用。
另外,是否允许同一范围内的 2 个 lambda 具有相同的捕获签名,例如两者都是 []
,或者都是 [&x, =]
谢谢
最佳答案
1) [x, &y](){}
未捕获其余部分
2) [=, &y](){}
3) [&, x](){}
The capture-list is a comma-separated list of zero or more captures, optionally beginning with the capture-default. The only capture defaults are & (by reference) and = (by value). If a capture-default is used, no other captures may use the same capture type. Any capture may appear only once.
另外,是否允许同一作用域内的 2 个 lambda 具有相同的捕获签名,例如都为 [],或者都为 [&x, =]
当然是允许的。每个 lambda 都将是不同的对象并具有其不同的类型。如果你在两个 lambda 中按值捕获变量,那么每个 lambda 都会有它的拷贝。如果您在两个 lambda 中通过引用捕获变量,那么每个 lambda 都会引用同一个捕获的变量。
关于C++11 lambda : mixed capture list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31998613/