有没有办法访问lambda的成员变量?
代码:
auto f = [count = 0] () mutable { count++; }
int count = f.count ? //这里报错,说不能访问f的private变量
要如何才能访问到f.count ?
有没有办法访问lambda的成员变量?
代码:
auto f = [count = 0] () mutable { count++; }
int count = f.count ? //这里报错,说不能访问f的private变量
要如何才能访问到f.count ?
让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言lambda表达式的成员变量默认是私有的,外部无法直接访问。如果想要访问lambda表达式中的成员变量,可以使用lambda表达式的捕获列表(capture list)。 捕获列表由包含在方括号([])中的变量列表组成,每个变量可以指定其捕获方式。捕获方式包括按值捕获和按引用捕获。按值捕获会复制变量值,而按引用捕获则会将变量绑定到一个引用上。 对于上面的代码,可以使用如下的捕获列表来访问lambda表达式中的成员变量: auto f = [count = 0]() mutable { count++; }; int count = f.count; 修改后的代码如下: auto f = [count = 0]() mutable { count++; }; int count = f.count; // 此处访问f的成员变量count 值得注意的是,捕获方式默认为按值捕获,如果要按引用捕获变量,需要在变量名前加&符号。 例如: int x = 1; auto f = [&x]() { x++; }; // 按引用捕获变量x 最后,要注意捕获的变量必须能够在lambda表达式执行时保持有效,例如不能捕获函数的局部变量。