将引用和指针传递给 lambda
Passing references and pointers to lambdas
我正在编写传递对lambda表达式的引用的代码,所以我决定使用g ++ -7查看一些简单的示例
代码:
int i = 2;
auto f = [i]() {
printf("i = %dn", i);
};
printf("incrementing i to %dn", ++i);
f();
指纹
incrementing i to 3
i = 2
正如预期的那样,因为Lamda复制了i
以供以后使用,并且:
int i = 3;
int& j = i;
auto g = [j]() {
printf("j = %dn", j);
};
printf("incrementing i to %dn", ++i);
g();
指纹
incrementing i to 4
j = 3
还:
i = 4;
int* k = &i;
auto h = [k]() {
printf("*k = %dn", *k);
};
printf("incrementing i to %dn", ++i);
h();
指纹
incrementing i to 5
*k = 5
现在通常引用的行为类似于不需要取消引用(并且无法更改(的指针,但对于 lamda 捕获,情况并非如此。 这是标准的预期行为吗?如果是,为什么这与正常的参考行为不同?
除非您在捕获中使用&
,否则 lambda 表达式将按值捕获。无论你是捕获i
还是j
,除非你使用&i
或&j
,否则变量都是按值捕获的。
这与常规功能没有什么不同。
void foo(int i) {}
void bar(int& i) {}
int i;
int& j = i;
foo(i); // Passed by value
foo(j); // Passed by value also.
bar(i); // Passed by reference
bar(j); // Passed by reference also.
传递i
作为参考使用
auto f = [&i]() {
printf("i = %dn", i);
};
(请注意捕获中的&
前缀(
无论最初是否i
被声明为参考并不重要。
相关文章:
- 模板函数指针和lambda
- 如何调用存储在指向"std::函数"的指针中的 lambda?
- C++:Lambda 函数指针转换的用例是什么?
- 如何在 lambda 中访问捕获的此指针的"typeid"?
- 如何通过指针传递lambda函数?
- 使用带有 lambda 函数指针的模板
- 函数指针和 lambda 的内存管理
- 获取具有静态局部变量的绑定/推断捕获 lambda 的函数指针
- 如何组合lambda,vairadic函数和函数指针?
- C++将 lambda 函数另存为成员变量,而不使用函数指针进行优化
- Lambda 到函数指针适配器的理解
- 模板参数推导/替换失败,lambda作为函数指针
- 将引用和指针传递给 lambda
- 将捕获的 lambda 包装为模板函数中的函数指针
- 如何从 lambda 表达式中获取函数指针?
- 通过 lambda 在空指针处赋值
- 如何定义与将 Lambda 与捕获作为回调一起使用兼容的函数指针
- 如何修改lambda指针捕获
- 如何在模板中返回 lambda 指针
- 数组衰减为Lambda指针