lambda表达式 = this &的区别
时间: 2024-05-29 21:14:24 浏览: 6
lambda表达式是一种匿名函数,它可以在需要函数对象的地方使用。它的语法类似于函数定义,但没有函数名。而this是指当前对象,用于在类的成员函数中访问对象的成员变量和成员函数。它们两者并没有直接联系,lambda表达式可以使用this来访问当前对象的成员变量和成员函数,但this并不等同于lambda表达式。
相关问题
lambda表达式捕获this 声明方式
lambda表达式捕获this指针的声明方式主要有两种:隐式捕获和显式捕获。
1. 隐式捕获
隐式捕获使用默认的捕获方式,即在lambda表达式中使用this指针来捕获外部的this指针。在lambda表达式中使用this指针时,需要使用捕获列表中的关键字"=",例如:
```
class MyClass {
public:
void foo() {
auto lambda = [=](){
// 在lambda表达式中访问类的成员变量和成员函数
// ...
};
lambda();
}
};
```
在上面的例子中,lambda表达式使用默认捕获方式捕获外部的this指针。
2. 显式捕获
显式捕获需要在lambda表达式的参数列表中显式地指定this指针的捕获方式。显式捕获可以使用三种方式:值捕获、引用捕获和指针捕获,分别使用关键字"="、"&"、"this"来指定。例如:
```
class MyClass {
public:
void foo() {
auto lambda = [this](){
// 在lambda表达式中访问类的成员变量和成员函数
// ...
};
lambda();
}
};
```
在上面的例子中,lambda表达式使用指针捕获方式显式捕获外部的this指针。
lambda表达式 java this
在lambda表达式中,this关键字的作用与普通的Java类中的this关键字不同。在lambda表达式中,this关键字指向创建lambda表达式的方法所在的类实例。
这与使用Runnable接口的匿名类不同,匿名类中的this关键字指向匿名类实例本身。因此,在使用Runnable接口时,this关键字可以正常使用,但在lambda表达式中,使用this关键字可能会出现问题。
这是由编译器的实现方式决定的。编译器会为lambda表达式生成一个类,并将其作为一个方法传递给函数式接口。因此,lambda表达式中的this指向的是创建lambda表达式的方法所在的类实例,而不是lambda表达式本身。
所以,当你在lambda表达式中使用this关键字时,请确保你理解它指向的是哪个对象。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [Java细节,Lambda表达式中使用this会怎么样?](https://blog.csdn.net/lfq88/article/details/113697991)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* [java8(三)Lambda表达式中的this](https://blog.csdn.net/u010825931/article/details/105774383)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)