不同的Lambda表达式,即使它们的实现细节相同,也从不会衰减到同一个函数指针。Lambda表达式是在编译时生成的匿名类的实例,与表示它们的函数指针的生命周期没有关系。因此,即使它们具有相同的代码,它们的类型是不同的,从而不可能衰减到同一个函数指针。
代码示例:
#include
int main() {
auto lambda1 = [] { std::cout << "This is lambda1" << std::endl; };
auto lambda2 = [] { std::cout << "This is lambda2" << std::endl; };
auto lambda3 = lambda1;
// 获取函数指针
auto ptr1 = &lambda1;
auto ptr2 = &lambda2;
auto ptr3 = &lambda3;
std::cout << *ptr1 << std::endl; // 输出:函数指针
std::cout << *ptr2 << std::endl; // 输出:函数指针
std::cout << *ptr3 << std::endl; // 输出:函数指针
// 判断是否相等
std::cout << (ptr1 == ptr2) << std::endl; // 输出:0
std::cout << (ptr1 == ptr3) << std::endl; // 输出:1
return 0;
}