vector<int> vec;
//a
auto foo = [&vec](){
//do something
};
//b
auto foo = [&v = vec](){
//do something
};
Run Code Online (Sandbox Code Playgroud)
我是否理解正确,只有a和b之间的区别是在b情况下为"vec"创建别名"v"或者还有更多内容吗?
小智 11
在这种情况下,没有真正的区别.但是,如果您按值捕获,则会有所不同:
const std::vector<int> vec; // note const
auto foo = [vec]() mutable {
// can't change vec here since it is captured with cv-qualifiers
};
auto bar = [v = vec]() mutable {
// can change v here since it is captured by auto deduction rules
// (cv-qualifiers dropped)
};
Run Code Online (Sandbox Code Playgroud)
基本上没有.它只是允许您为捕获的值提供自定义名称.
但是请注意,当您想要将对象实际移动到闭包中时,需要使用此语法(称为init捕获):
std::vector<int> vector;
auto lambda = [vec = std::move(vector)]() { /* the lambda owns the vector now */ });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
421 次 |
| 最近记录: |